如何为 EventBridge 规则创建自定义事件模式?
我想使用 Amazon EventBridge 规则来捕获 AWS 服务的特定事件。但我无法创建与该事件匹配的自定义事件模式。如何创建自定义的 EventBridge 事件模式?
解决方法
**注意:**如果您在运行 AWS 命令行界面(AWS CLI)命令时遇到错误,请确保您使用的是最新版本的 AWS CLI。
EventBridge 接受来自 AWS 服务、EventBridge 合作伙伴和自定义事件的事件。本文讨论源自 AWS 服务的 JSON 事件。您可以使用事件模式创建 EventBridge 规则来筛选传入的事件。这样,EventBridge 规则仅匹配所需的事件并将这些事件转发给目标。
确定传入事件的 JSON 格式
确定传入事件的 JSON 格式有三种方法:
- 请参阅此 EventBridge 接收的来自 AWS 服务的示例事件列表。
- EventBridge 提供 EventBridge 沙盒工具来帮助用户创建和验证事件模式。例如,如果您对 EC2 实例状态更改事件感兴趣,则可以执行以下操作:
- 打开 EventBridge 控制台。
- 在导航窗格的 Developer resources(开发人员资源)下,选择 Sandbox(沙盒)。
- 滚动到 Sample event(示例事件)部分,然后选择 AWS events(AWS 事件)。
- 在 Sample event(示例事件)菜单中,选择 EC2 Instance State-change Notification(EC2 实例状态更改通知)。这将使用第一个示例事件填充该窗口。对于给定的事件类型,可能有多个示例可用。
- 使用与给定 AWS 服务的所有事件匹配的简单事件模式创建 EventBridge 规则。例如,此事件模式匹配所有 Amazon Elastic Compute Cloud (Amazon EC2) 事件:
{ "source": [ "aws.ec2" ] }
**注意:**事件模式中不允许使用通配符和空事件。
接下来,将 SNS 或 CloudWatch 日志组目标与捕获入站事件的规则关联起来。目标必须将 Configure target input(配置目标输入)选项设置为 Matched events(匹配的事件),这样才能正确接收服务发出的 JSON。
创建与传入事件具有相同 JSON 格式的事件模式
以下规则适用于创建有效的匹配事件模式:
- 您在事件模式中未指定的任何字段将会自动匹配。例如,如果事件模式中未指定 Detail(详细信息)字段,则事件模式将会匹配具有任何详细信息的所有事件。
- 要匹配 JSON 结构中的下一级字段,请使用大括号 { }。如果您要查看更大的事件结构,则 JSON 查看器可能会有帮助。
- 要从 JSON 事件匹配的字符串必须位于方括号 [ ] 中。您可以在方括号中包含多个值,以便在传入事件中具有任何一个值时调用事件。例如,要根据 Amazon EC2 或 Amazon DynamoDB 发送的每个事件调用事件,可以使用如下筛选条件:
{ "source": [ "aws.ec2", "aws.dynamodb" ] }
步骤 1:使用 SNS /CloudWatch 目标获取传入的事件
此示例显示了向 EventBridge 发出的 Route 53 事件。ChangeResourceRecordSets API 调用表示在 Amazon Route 53 托管区域中创建 A 记录。Amazon Simple Notification Service (Amazon SNS) 主题或 Amazon CloudWatch 日志组目标捕获以下事件:
{ "version": "0", "id": "d857ae5c-cc83-3742-ab88-d825311ee4e9", "detail-type": "AWS API Call via CloudTrail", "source": "aws.route53", "account": "123456789012", "time": "2019-12-05T16:50:53Z", "region": "us-east-1", "resources": [], "detail": { "eventVersion": "1.05", "userIdentity": { "type": "AssumedRole", "principalId": "AROAABCDEFGHIJKLMNOPQ:Admin", "arn": "arn:aws:sts::123456789012:assumed-role/Admin", "accountId": "123456789012", "accessKeyId": "ASIAABCDEFGH12345678", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AROAABCDEFGHIJKLMNOPQ", "arn": "arn:aws:iam::123456789012:role/Admin", "accountId": "123456789012", "userName": "Admin" }, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "false", "creationDate": "2019-12-05T16:28:27Z" } } }, "eventTime": "2019-12-05T16:50:53Z", "eventSource": "route53.amazonaws.com", "eventName": "ChangeResourceRecordSets", "awsRegion": "us-east-1", "sourceIPAddress": "12.34.56.78", "userAgent": "console.amazonaws.com", "requestParameters": { "hostedZoneId": "Z1RP12345WXRQD", "changeBatch": { "changes": [ { "action": "CREATE", "resourceRecordSet": { "type": "A", "tTL": 300, "resourceRecords": [ { "value": "4.4.4.4" } ], "name": "test.example.us." } } ] } }, "responseElements": { "changeInfo": { "status": "PENDING", "id": "/change/C271P4WIKN511J", "submittedAt": "Dec 5, 2019 4:50:53 PM" } }, "additionalEventData": { "Note": "Do not use to reconstruct hosted zone" }, "requestID": "bbbf9847-96cb-45ef-b617-d535b9fe83d8", "eventID": "74e2d2c8-7497-4292-94d0-348272dbc4f7", "eventType": "AwsApiCall", "apiVersion": "2013-04-01" } }
步骤 2:创建相应的事件模式
此示例事件模式筛选多个字段。例如,eventName、hostedZoneld、action 和 type。匹配事件必须包含所有字段和相应的值。该模式隔离针对特定托管区域创建的 A 记录。
{ "source": [ "aws.route53" ], "detail": { "eventSource": [ "route53.amazonaws.com" ], "eventName": [ "ChangeResourceRecordSets" ], "requestParameters": { "hostedZoneId": [ "Z1RP12345WXRQD" ], "changeBatch": { "changes": { "action": [ "CREATE" ], "resourceRecordSet": { "type": [ "A" ] } } } } } }
测试事件模式
使用 EventBridge 控制台进行测试
利用 EventBridge 沙盒:
- 在 Sample event(示例事件)部分中,选择或输入示例事件。
- 在 Event pattern(事件模式)部分下,提供事件模式。为此,您可以使用 Event pattern form(事件模式表单)中的菜单构建事件模式,也可以使用 Custom patterns (JSON editor)(自定义模式(JSON 编辑器))输入自定义事件模式。
- 填充这两个部分后,选择 Test pattern(测试模式)以确认事件模式与给定的示例事件相匹配。
使用 AWS CLI 进行测试
在 AWS CLI 中,运行 test-event-pattern 命令。要确认事件模式匹配,请确保结果为 true。通过执行此操作,您可以识别 AWS 服务发送的 JSON 事件,并协助您的自定义事件模式捕获特定的事件。
相关信息
创建对事件做出反应的 Amazon EventBridge 规则
教程:使用 EventBridge 记录 AWS API 调用
Amazon EventBridge - CloudWatch Events 与 EventBridge 之间有何区别?(视频)
相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 3 年前