

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

# 教程：使用架构向 Amazon Kinesis 发送事件 EventBridge
<a name="eb-relay-events-kinesis-stream"></a>

您可以将 AWS API 调用[事件](eb-events.md)发送 EventBridge 到 [Amazon Kinesis 流](https://docs.aws.amazon.com/streams/latest/dev/introduction.html)、创建 Kinesis Data Streams 应用程序以及处理大量数据。在本教程中，您将创建一个 Kinesis 流，然后在 EventBridge 控制台中创建一条[规则](eb-rules.md)，以便在 A [ma](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html) zon EC2 实例停止时向该流发送事件。

**Topics**
+ [先决条件](#eb-stream-prerequisite)
+ [步骤 1：创建 Amazon Kinesis 流](#eb-stream-create-stream)
+ [步骤 2：创建规则](#eb-stream-create-rule)
+ [步骤 3：测试规则](#eb-stream-test-rule)
+ [步骤 4：验证事件是否已发送](#eb-stream-verify-event)
+ [步骤 5：清理资源](#cleanup)

## 先决条件
<a name="eb-stream-prerequisite"></a>

在本教程中，您将使用以下工具：
+ 使用 AWS CLI 来处理 Kinesis 直播。

  要安装 AWS CLI，请参阅[安装、更新和卸载 AWS CLI 版本 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)。

**注意**  
本教程使用 AWS 事件和内置`aws.events`架构注册表。您也可以根据自定义事件的架构创建 EventBridge 规则，方法是手动将它们添加到自定义架构注册表中，或者使用架构发现。  
有关架构的更多信息，请参阅 [Amazon EventBridge 架构](eb-schema.md)。有关使用其他事件模式选项创建规则的更多信息，请参阅 [在 Amazon 中创建规则 EventBridge](eb-create-rule-visual.md)。

## 步骤 1：创建 Amazon Kinesis 流
<a name="eb-stream-create-stream"></a>

要创建直播，请在命令提示符下使用`create-stream` AWS CLI 命令。

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

当流状态为 `ACTIVE` 时，表示流已就绪。要检查流状态，请使用 `describe-stream` 命令。

```
aws kinesis describe-stream --stream-name test
```

## 步骤 2：创建规则
<a name="eb-stream-create-rule"></a>

创建规则，以便在您停止 Amazon EC2 实例时向您的直播发送事件。

**创建 规则**

1. 打开 Amazon EventBridge 控制台，网址为[https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/)。

1. 在导航窗格中，选择**规则**。

1. 选择**创建规则**。

1. 为规则输入名称和描述。例如，将规则命名为 `TestRule`

1. 对于**事件总线**，选择**默认**。

1. 对于**规则类型**，选择**具有事件模式的规则**。

1. 选择**下一步**。

1. 对于**事件来源**，选择**AWS 事件或 EventBridge 合作伙伴事件**。

1. 对于**创建方法**，选择**使用架构**。

1. 对于 **Event pattern**（事件模式），执行以下操作：

   1. 对于**架构类型**，选择**从架构注册表中选择架构**。

   1. 对于**架构注册表**，请从下拉列表中选择 **aws.events**。

   1. 对于**架构**，请EC2InstanceStateChangeNotification从下拉列表中选择 **aws.ec2@**。

      EventBridge 在 “**模型**” 下显示事件架构。

      EventBridge 在事件所需的所有属性旁边显示一个红色星号，而不是*事件模式所需的*属性。

   1. 在**模型**中，设置以下事件筛选属性：

      1. 选择 **state** 属性旁的 **\$1 编辑**。

         将**关系**留空。对于**值**，请输入 `running`。选择**设置**。

      1. 选择 **source** 属性旁的 **\$1 编辑**。

         将**关系**留空。对于**值**，请输入 `aws.ec2`。选择**设置**。

      1. 选择 **detail-type** 属性旁的 **\$1 编辑**。

         将**关系**留空。对于**值**，请输入 `EC2 Instance State-change Notification`。选择**设置**。

   1. 要查看您构造的事件模式，请选择**以 JSON 格式生成事件模式**

      EventBridge 以 JSON 格式显示事件模式：

      ```
      {
        "detail": {
          "state": ["running"]
        },
        "detail-type": ["EC2 Instance State-change Notification"],
        "source": ["aws.ec2"]
      }
      ```

1. 选择**下一步**。

1. 对于**目标类型**，选择**AWS 服务**。

1. 对于**选择目标**，从下拉列表中选择 **Kinesis 流**。

1. 对于**流**，请选择您在**步骤 1：创建 Amazon Kinesis 流**部分创建的 Kinesis 流。在此示例中，选择 `test`。

1. 对于**执行角色**，选择**为此特定资源创建新角色**。

1. 选择**下一步**。

1. 选择**下一步**。

1. 查看规则详细信息并选择**创建规则**。

## 步骤 3：测试规则
<a name="eb-stream-test-rule"></a>

要测试您的规则，请停止 Amazon EC2 实例。等待几分钟让实例停止，然后检查您的 CloudWatch 指标以验证您的函数是否已运行。

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

1. 打开 Amazon EC2 控制台，网址为[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 启动一个实例。有关更多信息，请参阅 *Amazon EC2 用户指南*中的[启动您的实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html)。

1. 打开 Amazon EventBridge 控制台，网址为[https://console.aws.amazon.com/events/](https://console.aws.amazon.com/events/)。

1. 在导航窗格中，选择**规则**。

   选择所创建规则的名称，然后选择 **Metrics for the rule (规则的指标)**。

1. （可选）当您完成后，终止该实例。有关更多信息，请参阅 *Amazon EC2 用户指南*中的[终止您的实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html)。

## 步骤 4：验证事件是否已发送
<a name="eb-stream-verify-event"></a>

您可以使用从直播中获取记录，以验证事件是否已发送。 AWS CLI 

**获取记录**

1. 要开始从 Kinesis 流中读取，请在命令提示符下使用 `get-shard-iterator` 命令。

   ```
   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="
   }
   ```

1. 要获取记录，请使用以下 `get-records` 命令。使用上一步输出中的分片迭代器。

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

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

1. Kinesis 中的记录是以 Base64 编码的。使用 Base64 解码器对数据进行解码，这样您就可以验证这是不是以 JSON 格式发送到流的事件。

## 步骤 5：清理资源
<a name="cleanup"></a>

除非您想要保留为本教程创建的资源，否则可立即将其删除。通过删除不再使用的 AWS 资源，可以防止向您的 AWS 账户收取不必要的费用。

**要删除 EventBridge 规则**

1. 打开 EventBridge 控制台的 [“规则” 页面](https://console.aws.amazon.com/events/home#/rules)。

1. 选择您创建的规则。

1. 选择**删除**。

1. 选择**删除**。

**删除 Kinesis 流**

1. 在 Kinesis 控制台中打开[数据流页面](https://console.aws.amazon.com/kinesis/home#/streams/list)。

1. 选择您创建的流。

1. 依次选择**操作**和**删除**。

1. 在字段中输入**删除**，并选择**删除**。