本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
亚马逊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 规则。您可以包含用引号 (“) 括起来的字符串、数字和关键字true
、false
, 和null
.
对于字符串,EventBridge精确使用character-by-character匹配时不进行小写化或任何其他字符串标准化。
对于数字,EventBridge使用字符串表示法。例如,300、300.0 和 3.0e2 不相等。
当你编写事件模式来匹配事件时,你可以使用TestEventPattern
API 或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]
}
}