教程:使用 CloudWatch 事件将事件中继到 Amazon Kinesis 流 - Amazon CloudWatch Events
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程:使用 CloudWatch 事件将事件中继到 Amazon Kinesis 流

注意

Amazon EventBridge 是管理事件的首选方式。CloudWatch Events 和 EventBridge 是相同的底层服务和 API,但 EventBridge 提供了更多功能。您在 CloudWatch 或 EventBridge 中所作的更改将显示在每个控制台中。有关更多信息,请参阅 。Amazon EventBridge

您可以中继AmazonAPI 调用事件在 CloudWatch 事件到 Amazon Kinesis 中的流。

Prerequisite

安装 Amazon CLI。有关更多信息,请参阅 Amazon Command Line Interface 用户指南

第 1 步:创建 Amazon Kinesis 流

使用下面的 create-stream 命令创建流。

aws kinesis create-stream --stream-name test --shard-count 1

当流状态为 ACTIVE 时,表示流已就绪。使用以下 describe-stream 命令检查流状态:

aws kinesis describe-stream --stream-name test

第 2 步:创建规则

例如,创建一个规则,以便在您停止 Amazon EC2 实例时将事件发送到流。

创建 规则

  1. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

  2. 在导航窗格中,选择 EventsCreate rule

  3. 对于 Event source (事件源),执行以下操作:

    1. 选择 Event Pattern (事件模式)

    2. 选择 Build event pattern to match events by service

    3. 依次选择 EC2实例状态更改通知

    4. 依次选择特定状态正在运行

  4. 对于目标,依次选择添加目标Kinesis 流

  5. 对于 Stream,选择您创建的流。

  6. 选择 Create a new role for this specific resource

  7. 选择 Configure details

  8. 对于 Rule definition,键入规则的名称和描述。

  9. 选择 Create rule

第 3 步:测试 规则

要测试规则,请停止 Amazon EC2 实例。等待几分钟,在该实例停止后,检查 CloudWatch 指标,以验证您的函数是否已调用。

通过停止一个实例来测试您的规则

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 启动一个实例。有关更多信息,请参阅 。启动实例中的适用于 Linux 实例的 Amazon EC2 用户指南

  3. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

  4. 在导航窗格中,依次选择 EventsRules,再选择所创建规则的名称,然后选择 Show metrics for the rule

  5. (可选) 完成后,您可以终止实例。有关更多信息,请参阅 。终止您的实例中的适用于 Linux 实例的 Amazon EC2 用户指南

第 4 步:验证事件是否已中继

您可以从流中获取记录,以验证事件是否已中继。

获取记录

  1. 使用以下获取分享迭代器命令开始从 Kinesis 流中读取数据:

    aws kinesis get-shard-iterator --shard-id shardId-000000000000 --shard-iterator-type TRIM_HORIZON --stream-name test

    下面是示例输出:

    { "ShardIterator": "AAAAAAAAAAHSywljv0zEgPX4NyKdZ5wryMzP9yALs8NeKbUjp1IxtZs1Sp+KEd9I6AJ9ZG4lNR1EMi+9Md/nHvtLyxpfhEzYvkTZ4D9DQVz/mBYWRO6OTZRKnW9gd+efGN2aHFdkH1rJl4BL9Wyrk+ghYG22D2T1Da2EyNSH1+LAbK33gQweTJADBdyMwlo5r6PqcP2dzhg=" }
  2. 使用以下 get-records 命令获取记录。分片迭代器是您在上一步获取的:

    aws kinesis get-records --shard-iterator AAAAAAAAAAHSywljv0zEgPX4NyKdZ5wryMzP9yALs8NeKbUjp1IxtZs1Sp+KEd9I6AJ9ZG4lNR1EMi+9Md/nHvtLyxpfhEzYvkTZ4D9DQVz/mBYWRO6OTZRKnW9gd+efGN2aHFdkH1rJl4BL9Wyrk+ghYG22D2T1Da2EyNSH1+LAbK33gQweTJADBdyMwlo5r6PqcP2dzhg=

    如果命令成功,它将从指定分片的流中请求记录。您可能会收到零个或多个记录。返回的任何记录都不能表示流中的所有记录。如果您未收到预期的数据,请继续调用 get-records

    Kinesis 中的记录是经过 Base64 编码的。但是,Amazon CLI 中的流支持不提供 base64 解码。如果您使用 base64 解码程序手动解码数据,您会发现它是以 JSON 格式中继到流的事件。