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

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

注意

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

可以中继 Amazon CloudWatch Events 中的 API 调用事件到 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. 使用以下 get-shard-iterator 命令开始从 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 格式中继到流的事件。