Amazon CloudWatch 事件
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

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

您可以将 CloudWatch Events 中的 AWS API 调用事件中继到 Kinesis 中的流。

先决条件

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

步骤 1:创建 Kinesis 流

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

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

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

Copy
aws kinesis describe-stream --stream-name test

步骤 2:创建规则

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

创建规则

  1. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

  2. 在导航窗格中,选择 Events

  3. 选择 Create rule

  4. 对于 Event source,执行以下操作:

    1. 选择 Event Pattern

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

    3. 选择 EC2,然后选择 Instance State-change Notification

    4. 选择 Specific state(s),然后选择 Running

     事件选择器窗格
  5. 对于 Targets,选择 Add target,然后选择 Kinesis stream

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

  7. 选择 Configure details

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

  9. 对于 AWS permissions,选择用于创建新角色的选项。这将在新选项卡中打开 IAM 控制台。新角色将向 CloudWatch Events 授予将记录写入到流的权限。选择 Allow。带有 IAM 窗口的选项卡随即关闭。

  10. 选择 Create rule

步骤 3:测试规则

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

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

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

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

  3. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

  4. 若要查看事件的指标,请执行以下操作:

    1. 在导航窗格中,依次选择 EventsRules

    2. 选择您创建的规则的名称。

    3. 选择 Show metrics for the rule

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

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

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

获取记录

  1. 使用以下 get-shard-iterator 命令开始从 Kinesis 流中读取数据:

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

    下面是示例输出:

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

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

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

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