创建对 Amazon RDS 事件触发的规则 - Amazon Relational Database Service

创建对 Amazon RDS 事件触发的规则

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

创建将 Amazon RDS 事件发送到 CloudWatch Events 的规则

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

创建对 RDS 事件触发的规则:
  1. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

  2. 在导航窗格中的事件下,选择规则

  3. 选择 Create rule (创建规则)

  4. 对于 Event Source (事件源),执行以下操作:

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

    2. 对于服务名称,请选择 Relational Database Service (RDS)

    3. 对于 Event Type(事件类型),请选择触发事件的 Amazon RDS 资源的类型。例如,如果数据库实例触发事件,请选择 RDS DB Instance Event(RDS 数据库实例事件)。

  5. 对于目标,选择添加目标,并选择当检测到选定类型的事件时要执行的 AWS 服务。

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

  7. 对于许多目标类型,CloudWatch Events 需要权限以便将事件发送到目标。在这些情况下,CloudWatch Events 可以创建运行事件所需的 IAM 角色:

    • 若要自动创建 IAM 角色,请选择为此特定资源创建新角色

    • 要使用您之前创建的 IAM 角色,请选择使用现有角色

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

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

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

  10. 选择 Create rule (创建规则)

有关更多信息,请参阅 Amazon CloudWatch 用户指南中的创建触发事件的 CloudWatch Events 规则

教程:使用 Amazon EventBridge 记录数据库实例的状态更改

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

重要

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

步骤 1:创建 AWS Lambda 函数

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

创建 Lambda 函数
  1. 打开 AWS Lambda 控制台,地址:https://console.aws.amazon.com/lambda/

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

  3. 选择 Author from scratch (从头创作)

  4. Create function (创建函数) 页面上,执行以下操作:

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

    2. Runtime(运行时)中,选择 Node.js 16x

    3. 对于 Architecture(架构),选择 x86_64

    4. 对于 Execution role(执行角色),请执行以下任一操作:

      • 选择 Create a new role with basic Lambda permissions (创建具有基本 Lambda 权限的新角色)

      • 对于 Existing role(现有角色),选择 Use an existing role(使用现有角色)。选择要使用的角色。

    5. 选择创建函数

  5. RDSInstanceStateChange 页面上,请执行以下操作:

    1. Code source (代码源) 中,请选择index.js

    2. index.js 窗格中,删除现有代码。

    3. 输入以下代码:

      console.log('Loading function'); exports.handler = async (event, context) => { console.log('Received event:', JSON.stringify(event)); };
    4. 选择 Deploy (部署)

步骤 2:创建规则

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

创建 EventBridge 规则
  1. 打开位于 https://console.aws.amazon.com/events/ 的 Amazon EventBridge 控制台。

  2. 在导航窗格中,选择 Rules (规则)

  3. 选择 Create rule (创建规则)

  4. 为规则输入名称和描述。例如,输入 RDSInstanceStateChangeRule

  5. 选择 Rule with an event pattern(具有事件模式的规则),然后选择 Next(下一步)。

  6. 对于 Event source(事件源),选择 AWS 事件或 EventBridge 合作伙伴事件

  7. 向下滚动到 Event pattern(事件模式)部分。

  8. 对于事件源,选择 AWS 服务

  9. 对于 AWS 服务,请选择关系数据库服务(RDS)

  10. 对于 Event type (事件类型),请选择 RDS DB Instance Event (RDS 数据库实例事件)

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

  12. 对于 Target types(目标类型),选择 AWS service(服务)。

  13. 对于 Select a target(选择目标),选择 Lambda function(Lambda 函数)。

  14. 对于 Function(函数),选择您创建的 Lambda 函数。然后选择下一步

  15. Configure tags(配置标签)中,选择 Next(下一步)。

  16. 查看您的规则中的步骤。然后,选择 Create rule(创建规则)。

步骤 3:测试规则

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

通过停止一个数据库实例来测试您的规则
  1. 通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

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

  3. 打开位于 https://console.aws.amazon.com/events/ 的 Amazon EventBridge 控制台。

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

  5. 规则详细信息中,选择监控

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

  6. All metrics (所有指标)中,选择所创建规则的名称。

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

  7. 在导航窗格中,选择 Log groups (日志组)

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

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

    { "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 事件概述

  10. (可选)完成后,您可以打开 Amazon RDS 控制台并启动之前停止的实例。