亚马逊EventBridge事件模式 - Amazon EventBridge
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

亚马逊EventBridge事件模式

事件模式与事件它们匹配。Rule使用事件模式来选择事件并将事件发送到目标。事件模式匹配或不匹配事件。

重要

在 EventBridge 中,可能创建导致无限循环的规则,即反复触发一个规则。例如,某规则可能检测到 S3 存储桶上的 ACL 已更改,然后触发软件以将 ACL 更改为所需状态。如果编写该规则时不小心,则 ACL 的后续更改将再次触发该规则,从而产生无限循环。

为防止出现这种情况,请在编写规则时使触发的操作不会重复激发同一规则。例如,您的规则可能仅在发现 ACL 处于错误状态时而不是在进行任何更改之后激发。

无限循环可能快速导致费用超出预期。我们建议您使用预算功能,以便在费用超出您指定的限制时提醒您。有关更多信息,请参阅通过预算管理成本

下面的视频介绍了事件模式的基础知识:

以下事件显示了一个简单的AmazonAmazon EC2 的事件。

{ "version": "0", "id": "6a7e8feb-b491-4cf7-a9f1-bf3703467718", "detail-type": "EC2 Instance State-change Notification", "source": "aws.ec2", "account": "111122223333", "time": "2017-12-22T18:43:48Z", "region": "us-west-1", "resources": [ "arn:aws:ec2:us-west-1:123456789012:instance/i-1234567890abcdef0" ], "detail": { "instance-id": "i-1234567890abcdef0", "state": "terminated" } }

以下事件模式处理所有 Amazon EC2instance-termination事件.

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

创建事件模式

要创建事件模式,请指定希望事件模式匹配的事件的字段。仅指定用于匹配的字段。上一个事件模式示例仅提供三个字段的值:顶级字段"source""detail-type",以及"state"在字段"detail"对象字段。EventBridge应用规则时忽略事件中的所有其他字段。

要使事件模式与事件匹配,事件必须包含事件模式中列出的所有字段名。字段名必须显示在具有相同嵌套结构的事件中。

EventBridge将会忽略事件中未包含在事件模式中的字段。效果是,对于事件模式中未显示的字段,有一个 “*" 通配符。

事件模式匹配的值遵循 JSON 规则。您可以包含用引号 (“) 括起来的字符串、数字和关键字truefalse, 和null.

对于字符串,EventBridge精确使用character-by-character匹配时不进行小写化或任何其他字符串标准化。

对于数字,EventBridge使用字符串表示法。例如,300、300.0 和 3.0e2 不相等。

当你编写事件模式来匹配事件时,你可以使用TestEventPatternAPI 或test-event-pattern用于测试模式是否匹配正确的事件的 CLI 命令。有关更多信息,请参阅 。TestEvent模式.

以下是中提供的所有比较运算符的汇总。EventBridge:

对照 示例 规则语法

Null

用户 ID 为空

"UserID": [ null ]

Empty

LastName空

"LastName": [""]

等于

名字为“Alice”

“姓名”: [“Alice”]

And

位置为“纽约”,日期为“星期一”

“位置”:[“New York”], “Day”: ["星期一"]

或者

PaymentType是 “信用卡” 或 “借记卡”

"PaymentType“: [“Credit”, “借记卡”]

天气是除“下雨”以外的任何天气

“Day”: [{“有什么东西”: [“下雨”]}]

数值(等于)

价格为 100

“Price”: [{“Number”: [“=”,100]}]

数值(范围)

价格大于 10,且小于等于 20

“Price”: [{“Number”: [“>”, 10, “<=”, 20]]

Exists

ProductName存在

"ProductName“: [{“存在”: true}]

不存在

ProductName不存在

"ProductName“: [{“存在”: false}]

始于

地区位于美国

"Region": [ {"prefix": "us-" } ]

匹配值

在事件模式中,要匹配的值位于 JSON 数组中,由方括号(“[”、“]”)括起来,以便您可以提供多个值。例如,要匹配 Amazon EC2 的事件,或Amazon Fargate,您可以使用以下模式,它匹配其中的值为的事件。"source"字段是"aws.ec2"要么"aws.fargate".

{ "source": ["aws.ec2", "aws.fargate"] }

事件和事件模式示例

您可以使用所有 JSON 数据类型和值来匹配事件。以下示例显示了事件以及与它们相匹配的事件模式。

字段匹配

您可以匹配字段的值。考虑以下 Amazon EC2 Auto Scaling 事件。

{ "version": "0", "id": "3e3c153a-8339-4e30-8c35-687ebef853fe", "detail-type": "EC2 Instance Launch Successful", "source": "aws.autoscaling", "account": "123456789012", "time": "2015-11-11T21:31:47Z", "region": "us-east-1", "resources": [], "detail": { "eventVersion": "", "responseElements": null } }

对于上一事件,可以使用"responseElements"要匹配的字段。

{ "source": ["aws.autoscaling"], "detail-type": ["EC2 Instance Launch Successful"], "detail": { "responseElements": [null] } }

值匹配

考虑以下 Amazon Macie 事件,该事件已被截断。

{ "version": "0", "id": "0948ba87-d3b8-c6d4-f2da-732a1example", "detail-type": "Macie Finding", "source": "aws.macie", "account": "123456789012", "time": "2021-04-29T23:12:15Z", "region":"us-east-1", "resources": [ ], "detail": { "schemaVersion": "1.0", "id": "64b917aa-3843-014c-91d8-937ffexample", "accountId": "123456789012", "partition": "aws", "region": "us-east-1", "type": "Policy:IAMUser/S3BucketEncryptionDisabled", "title": "Encryption is disabled for the S3 bucket", "description": "Encryption is disabled for the Amazon S3 bucket. The data in the bucket isn’t encrypted using server-side encryption.", "severity": { "score": 1, "description": "Low" }, "createdAt": "2021-04-29T15:46:02Z", "updatedAt": "2021-04-29T23:12:15Z", "count": 2, . . .

以下事件模式匹配严重性分数为 1 且计数为 2 的任何事件。

{ "source": ["aws.macie"], "detail-type": ["Macie Finding"], "detail": { "severity": { "score": [1] }, "count":[2] } }