创建对 Amazon RDS 事件触发的规则
使用 Amazon CloudWatch Events 和 Amazon EventBridge,您可以自动执行Amazon服务并响应系统事件,例如应用程序可用性问题或资源更改。
创建将 Amazon RDS 事件发送到 CloudWatch Events 的规则
您可以编写简单规则来指示所关注的 Amazon RDS 事件,并指示在事件匹配规则时要执行的自动化操作。您可以设置接收 JSON 格式的事件的各种目标,例如 Amazon Lambda 函数或 Amazon SNS 主题。例如,您可以将 Amazon RDS 配置为只要创建或删除数据库实例就向 CloudWatch Events 或 Amazon EventBridge 发送事件。有关更多信息,请参阅 Amazon CloudWatch Events 用户指南和 Amazon EventBridge 用户指南。
可以按照以下步骤创建对Amazon服务发出的事件进行触发的 CloudWatch Events 规则。
创建对事件触发的规则:
通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/
。 -
在导航窗格中的事件下,选择规则。
-
选择 Create rule (创建规则)。
-
对于 Event Source (事件源),执行以下操作:
-
选择 Event Pattern (事件模式)。
-
对于服务名称,请选择 Relational Database Service (RDS)。
-
对于事件类型,选择触发事件的 Amazon RDS 资源的类型。例如,如果数据库实例触发事件,请选择RDS 数据库实例事件。
-
-
对于目标,选择添加目标,并选择当检测到选定类型的事件时要执行的 Amazon 服务。
-
在此部分的其他字段中,根据需要输入此目标类型的特定信息。
-
对于许多目标类型,CloudWatch Events 需要权限以便将事件发送到目标。在这些情况下,CloudWatch Events 可以创建运行事件所需的 IAM 角色:
-
若要自动创建 IAM 角色,请选择为此特定资源创建新角色。
-
要使用您之前创建的 IAM 角色,请选择使用现有角色。
-
-
根据需要,可以重复步骤 5 至 7 为此规则添加另一目标。
-
选择 Configure details (配置详细信息)。对于 Rule definition (规则定义),键入规则的名称和描述。
规则名称在此区域中必须是唯一的。
-
选择 Create rule (创建规则)。
有关更多信息,请参阅 Amazon CloudWatch 用户指南中的创建触发事件的 CloudWatch Events 规则。
教程:使用 EventBridge 记录 Amazon RDS 实例的状态
您可以创建 Amazon Lambda 函数来记录 Amazon RDS 实例的状态更改。您可以选择创建一个规则,以便在状态发生任何转换时或者在状态转换为一个或多个相关状态时运行您前面创建的函数。
在本教程中,您将记录现有 RDS 数据库实例的任何状态更改。本教程假定您有一个小型的可以暂时关闭的正在运行的测试实例。
请勿在正在运行的生产实例上执行本教程。
步骤 1:创建 Amazon Lambda 函数
创建 Lambda 函数以记录状态更改事件。在创建规则时,您可以指定此函数。
创建 Lambda 函数
打开 Amazon Lambda 控制台,地址:https://console.aws.amazon.com/lambda/
。 -
如果您是首次接触 Lambda,您将看到欢迎页面。选择 Get Started Now (立即开始)。否则,选择创建函数。
-
选择 Author from scratch (从头创作)。
-
在 Create function (创建函数) 页面上,执行以下操作:
-
输入 Lambda 函数的名称和说明。例如,将函数命名为
RDSInstanceStateChange
。 -
对于 Runtime (运行时),请选择 Node.js 14x。
-
在 Execution Role (执行角色) 中,选择 Create a new role with basic Lambda permissions (创建具有基本 Lambda 权限的新角色)。对于现有角色,选择您的基本执行角色。否则,创建基本执行角色。
-
选择创建函数。
-
-
在 RDSInstanceStateChange 页面上,请执行以下操作:
-
在 Code source (代码源) 中,请选择index.js。
-
右键单击 index.js,然后选择 Open (打开)。
-
在 index.js 窗格中,删除现有代码。
-
输入以下代码:
console.log('Loading function'); exports.handler = async (event, context) => { console.log('Received event:', JSON.stringify(event)); };
-
选择 Deploy (部署)。
-
步骤 2:创建规则
创建一个规则,以便启动 Lambda 实例时运行 Amazon RDS 函数。
创建 EventBridge 规则
打开位于 https://console.aws.amazon.com/events/
的 Amazon EventBridge 控制台。 -
在导航窗格中,选择 Rules (规则)。
-
选择 Create rule (创建规则)。
-
为规则输入名称和描述。例如,输入
RDSInstanceStateChangeRule
。 -
对于 Define pattern (定义模式),请执行以下操作:
-
选择 Event pattern (事件模式)。
-
选择 Pre-defined pattern by service (服务预定义的模式)。
-
对于 Service provider (服务提供商),选择 Amazon。
-
对于服务名称,请选择 Relational Database Service (RDS)。
-
对于 Event type (事件类型),请选择 RDS DB Instance Event (RDS 数据库实例事件)。
-
-
对于 Select event bus (选择事件总线),选择 Amazon default event bus (亚马逊云科技默认事件总线)。当您账户中的某个 Amazon 服务发出一个事件时,它始终会发送到您账户的默认事件总线。
-
对于 Target (目标),选择 Lambda function (Lambda 函数)。
-
对于函数,选择您创建的 Lambda 函数。
-
选择创建。
步骤 3:测试规则
要测试您的规则,请关闭 RDS 数据库实例。等待几分钟,在实例关闭后,验证您的 Lambda 函数是否已调用。
通过停止一个数据库实例来测试您的规则
通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
停止一个 RDS 数据库实例
打开位于 https://console.aws.amazon.com/events/
的 Amazon EventBridge 控制台。 -
在导航窗格中,选择 Rules (规则),再选择所创建规则的名称。
-
在 Rule details (规则详细信息)中,请选择 Metrics for the rule (规则的指标)。
随后您将被重定向至 Amazon CloudWatch 控制台。
-
在 All metrics (所有指标)中,选择所创建规则的名称。
该图表表明规则已被调用。
-
在导航窗格中,选择 Log groups (日志组)。
-
选择 Lambda 函数 (/aws/lambda/
function-name
)的日志组的名称。 -
选择日志流的名称,以查看您启动的实例的函数提供的数据。您应该会看到接收的事件,类似以下内容:
{ "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" } }
-
(可选)完成后,您可以打开 Amazon RDS 控制台并启动之前停止的实例。