教程:使用 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 实例时将事件发送到流。
创建规则
通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/
。 -
在导航窗格中,选择 Events 和 Create rule。
-
对于 Event source (事件源),执行以下操作:
-
选择 Event Pattern (事件模式)。
-
选择 Build event pattern to match events by service。
-
依次选择 EC2 和实例状态更改通知
-
依次选择特定状态和正在运行。
-
-
对于目标,依次选择添加目标和 Kinesis 流。
-
对于 Stream,选择您创建的流。
-
选择 Create a new role for this specific resource。
-
选择 Configure details。
-
对于 Rule definition,键入规则的名称和描述。
-
选择 Create rule (创建规则)。
步骤 3:测试规则
为了测试规则,停用一个 Amazon EC2 实例。等待几分钟,在该实例停止之后,检查 CloudWatch 指标,以验证您的函数是否已调用。
通过停止一个实例来测试您的规则
通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/
。 -
启动一个实例。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的启动您的实例。
-
通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/
。 -
在导航窗格中,依次选择 Events 和 Rules,再选择所创建规则的名称,然后选择 Show metrics for the rule。
-
(可选) 完成后,您可以终止实例。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南 中的终止实例。
步骤 4:验证事件是否已中继
您可以从流中获取记录,以验证事件是否已中继。
获取记录
-
使用以下 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=" }
-
使用以下 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 格式中继到流的事件。