

# 创建对 Amazon RDS 事件触发的规则
<a name="rds-cloud-watch-events"></a>

使用 Amazon EventBridge，您可以自动执行 Amazon 服务和响应系统事件，例如应用程序可用性问题或资源更改。

**Topics**
+ [创建将 Amazon RDS 事件发送到 Amazon EventBridge 的规则](#rds-cloudwatch-events.sending-to-cloudwatch-events)
+ [教程：使用 Amazon EventBridge 记录数据库实例的状态更改](#log-rds-instance-state)

## 创建将 Amazon RDS 事件发送到 Amazon EventBridge 的规则
<a name="rds-cloudwatch-events.sending-to-cloudwatch-events"></a>

您可以编写简单规则来指示所关注的 Amazon RDS 事件，并指示在事件匹配规则时要执行的自动化操作。您可以设置接收 JSON 格式的事件的各种目标，例如 Amazon Lambda 函数或 Amazon SNS 主题。例如，您可以将 Amazon RDS 配置为只要创建或删除数据库实例就向 Amazon EventBridge 发送事件。有关更多信息，请参阅 [Amazon CloudWatch Events 用户指南](https://docs.amazonaws.cn/AmazonCloudWatch/latest/events/)和 [Amazon EventBridge 用户指南](https://docs.amazonaws.cn/eventbridge/latest/userguide/)。

**创建对 RDS 事件触发的规则：**

1. 通过以下网址打开 CloudWatch 控制台：[https://console.aws.amazon.com/cloudwatch/](https://console.amazonaws.cn/cloudwatch/)。

1. 在导航窗格中的**事件**下，选择**规则**。

1. 选择 **Create rule (创建规则)**。

1. 对于 **Event Source (事件源)**，执行以下操作：

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

   1. 对于**服务名称**，请选择 **Relational Database Service (RDS)**。

   1. 对于 **Event Type**（事件类型），请选择触发事件的 Amazon RDS 资源的类型。例如，如果数据库实例触发事件，请选择 **RDS DB Instance Event**（RDS 数据库实例事件）。

1. 对于**目标**，选择**添加目标**，并选择当检测到选定类型的事件时要执行的 Amazon 服务。

1. 在此部分的其他字段中，根据需要输入此目标类型的特定信息。

1. 对于许多目标类型，EventBridge 需要权限以便将事件发送到目标。在这些情况下，EventBridge 可以创建事件运行所需的 IAM 角色：
   + 要自动创建 IAM 角色，请选择**为此特定资源创建新角色**。
   + 要使用您之前创建的 IAM 角色，请选择**使用现有角色**。

1. 根据需要，可以重复步骤 5 至 7 为此规则添加另一目标。

1. 选择 **Configure details (配置详细信息)**。对于 **Rule definition (规则定义)**，键入规则的名称和描述。

   规则名称在此区域中必须是唯一的。

1. 选择 **Create rule (创建规则)**。

有关更多信息，请参阅《Amazon CloudWatch 用户指南》**中的 [Creating an EventBridge Rule That Triggers on an Event](https://docs.amazonaws.cn/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-Rule.html)。

## 教程：使用 Amazon EventBridge 记录数据库实例的状态更改
<a name="log-rds-instance-state"></a>

在本教程中，您可以创建 Amazon Lambda 函数来记录 Amazon RDS 实例的状态更改。然后，您可以创建一项规则，只要现有 RDS 数据库实例的状态发生更改，便运行该函数。本教程假定您有一个小型的可以暂时关闭的正在运行的测试实例。

**重要**  
请勿在正在运行的生产数据库实例上执行本教程。

**Topics**
+ [步骤 1：创建 Amazon Lambda 函数](#rds-create-lambda-function)
+ [步骤 2：创建规则](#rds-create-rule)
+ [步骤 3：测试规则](#rds-test-rule)

### 步骤 1：创建 Amazon Lambda 函数
<a name="rds-create-lambda-function"></a>

创建 Lambda 函数以记录状态更改事件。在创建规则时，您可以指定此函数。

**创建 Lambda 函数**

1. 打开 Amazon Lambda 控制台，地址：[https://console.aws.amazon.com/lambda/](https://console.amazonaws.cn/lambda/)。

1. 如果您是首次接触 Lambda，您将看到欢迎页面。选择 **Get Started Now (立即开始)**。否则，选择**创建函数**。

1. 选择 **Author from scratch (从头创作)**。

1. 在 **Create function (创建函数)** 页面上，执行以下操作：

   1. 输入 Lambda 函数的名称和说明。例如，将函数命名为 **RDSInstanceStateChange**。

   1. 在 **Runtime**（运行时）中，选择 **Node.js 16x**。

   1. 对于 **Architecture**（架构），选择 **x86\$164**。

   1. 对于 **Execution role**（执行角色），请执行以下任一操作：
      + 选择 **Create a new role with basic Lambda permissions (创建具有基本 Lambda 权限的新角色)**。
      + 对于 **Existing role**（现有角色），选择 **Use an existing role**（使用现有角色）。选择要使用的角色。

   1. 选择**创建函数**。

1. 在 **RDSInstanceStateChange** 页面上，请执行以下操作：

   1. 在 **Code source (代码源)** 中，请选择**index.js**。

   1. 在 **index.js** 窗格中，删除现有代码。

   1. 输入以下代码：

      ```
      console.log('Loading function');
      
      exports.handler = async (event, context) => {
          console.log('Received event:', JSON.stringify(event));
      };
      ```

   1. 选择 **Deploy (部署)**。

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

创建一个规则，以便启动 Lambda 实例时运行 Amazon RDS 函数。

**创建 EventBridge 规则**

1. 打开位于 [https://console.aws.amazon.com/events/](https://console.amazonaws.cn/events/) 的 Amazon EventBridge 控制台。

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

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

1. 为规则输入名称和描述。例如，输入 **RDSInstanceStateChangeRule**。

1. 选择 **Rule with an event pattern**（具有事件模式的规则），然后选择 **Next**（下一步）。

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

1. 向下滚动到 **Event pattern**（事件模式）部分。

1. 对于**事件源**，选择 **Amazon Web Services 服务**。

1. 对于 **Amazon 服务**，请选择**关系数据库服务（RDS）**。

1. 对于 **Event type (事件类型)**，请选择 **RDS DB Instance Event (RDS 数据库实例事件)**。

1. 保留原定设置事件模式。然后选择**下一步**。

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

1. 对于 **Select a target**（选择目标），选择 **Lambda function**（Lambda 函数）。

1. 对于 **Function**（函数），选择您创建的 Lambda 函数。然后选择**下一步**。

1. 在 **Configure tags**（配置标签）中，选择 **Next**（下一步）。

1. 查看您的规则中的步骤。然后，选择 **Create rule**（创建规则）。

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

要测试您的规则，请关闭 RDS 数据库实例。等待几分钟，在实例关闭后，验证您的 Lambda 函数是否已调用。

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

1. 通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.amazonaws.cn/rds/)。

1. 停止一个 RDS 数据库实例

1. 打开位于 [https://console.aws.amazon.com/events/](https://console.amazonaws.cn/events/) 的 Amazon EventBridge 控制台。

1. 在导航窗格中，选择 **Rules (规则)**，再选择所创建规则的名称。

1. 在**规则详细信息**中，选择**监控**。

   随后您将被重定向至 Amazon CloudWatch 控制台。如果您未被重定向，请单击**查看 CloudWatch 中的指标**。

1. 在 **All metrics (所有指标)**中，选择所创建规则的名称。

   该图表表明规则已被调用。

1. 在导航窗格中，选择 **Log groups (日志组)**。

1. 选择 Lambda 函数 (**/aws/lambda/*function-name***)的日志组的名称。

1. 选择日志流的名称，以查看您启动的实例的函数提供的数据。您应该会看到接收的事件，类似以下内容：

   ```
   {
       "version": "0",
       "id": "12a345b6-78c9-01d2-34e5-123f4ghi5j6k",
       "detail-type": "RDS DB Instance Event",
       "source": "aws.rds",
       "account": "111111111111",
       "time": "2021-03-19T19:34:09Z",
       "region": "us-east-1",
       "resources": [
           "arn:aws:rds:us-east-1:111111111111:db:testdb"
       ],
       "detail": {
           "EventCategories": [
               "notification"
           ],
           "SourceType": "DB_INSTANCE",
           "SourceArn": "arn:aws:rds:us-east-1:111111111111:db:testdb",
           "Date": "2021-03-19T19:34:09.293Z",
           "Message": "DB instance stopped",
           "SourceIdentifier": "testdb",
           "EventID": "RDS-EVENT-0087"
       }
   }
   ```

   有关 JSON 格式的 RDS 事件的更多示例，请参阅[Amazon RDS 事件概述](working-with-events.md#rds-cloudwatch-events.sample)。

1. （可选）完成后，您可以打开 Amazon RDS 控制台并启动之前停止的实例。