本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Amazon 中筛选内容EventBridge事件模式
亚马逊EventBridge支持使用声明式内容过滤事件模式. 通过内容筛选,您可以编写仅与非常特定条件下的事件匹配的复杂事件模式。例如,您可以创建一个与事件匹配的事件模式,当事件如果事件来自特定 IP 地址,或仅当事件 JSON 中不存在特定字段时才位于特定数值范围内。
在 EventBridge 中,可能创建导致无限循环的规则,即反复触发一个规则。例如,某规则可能检测到 S3 存储桶上的 ACL 已更改,然后触发软件以将 ACL 更改为所需状态。如果编写该规则时不小心,则 ACL 的后续更改将再次触发该规则,从而产生无限循环。
为防止出现这种情况,请在编写规则时使触发的操作不会重复激发同一规则。例如,您的规则可能仅在发现 ACL 处于错误状态时而不是在进行任何更改之后激发。
无限循环可能快速导致费用超出预期。我们建议您使用预算功能,以便在费用超出您指定的限制时提醒您。有关更多信息,请参阅通过预算管理成本。
前缀匹配
您可以根据事件源中值的前缀匹配事件。您可以对字符串值使用前缀匹配。
例如,以下事件模式将匹配其中的任何事件。"time"
字段开始于"2017-10-02"
例如"time": "2017-10-02T18:43:48Z"
.
{
"time": [ { "prefix": "2017-10-02" } ]
}
Anything-but 匹配
Anything-it匹配可匹配除规则中提供的内容之外的任何内容。
除了与字符串和数值匹配之外,您可以使用任何东西,包括仅包含字符串或仅包含数值的列表。
以下事件模式显示的是与字符串和数字匹配的任何东西。
{
"detail": {
"state": [ { "anything-but": "initializing" } ]
}
}
{
"detail": {
"x-limit": [ { "anything-but": 123 } ]
}
}
以下事件模式显示的任何内容,但与字符串列表匹配。
{
"detail": {
"state": [ { "anything-but": [ "stopped", "overloaded" ] } ]
}
}
以下事件模式显示的任何内容,但与数值列表匹配。
{
"detail": {
"x-limit": [ { "anything-but": [ 100, 200, 300 ] } ]
}
}
以下事件模式显示了匹配任何没有前缀的事件的匹配内容"init"
中的"state"
字段中返回的子位置类型。
Anything-it匹配只适用于单个前缀,而不是列表。
{
"detail": {
"state": [ { "anything-but": { "prefix": "init" } } ]
}
}
数值匹配
数字匹配适用于 JSON 数字的值。它仅限于 -1.0e9 和 +1.0e9 之间的值,精度为 15 位或小数点右侧为六位。
下面显示了事件模式的数值匹配,该模式仅与所有字段均为真的事件匹配。
{
"detail": {
"c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ],
"d-count": [ { "numeric": [ "<", 10 ] } ],
"x-limit": [ { "numeric": [ "=", 3.018e2 ] } ]
}
}
IP 地址匹配
您可以将 IP 地址匹配用于 IPv4 和 IPv6 地址。以下事件模式显示与以 10.0.0 开头且以 0 到 255 之间的数字结尾的 IP 地址匹配的 IP 地址。
{
"detail": {
"sourceIPAddress": [ { "cidr": "10.0.0.0/24" } ]
}
}
存在匹配
存在匹配适用于确定事件的 JSON 中存在或不存在某个字段。
Exists 匹配仅适用于叶节点。它对于中间节点不起作用。
以下事件模式匹配任何具有detail.state
字段中返回的子位置类型。
{
"detail": {
"state": [ { "exists": true } ]
}
}
前述事件模式匹配以下事件。
{
"detail-type": [ "EC2 Instance State-change Notification" ],
"resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-02ebd4584a2ebd341" ],
"detail": {
"state": [ "initializing", "running" ]
}
}
之前的事件模式与以下事件不匹配,因为它没有detail.state
字段中返回的子位置类型。
{
"detail-type": [ "EC2 Instance State-change Notification" ],
"resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-02ebd4584a2ebd341" ],
"detail": {
"c-count" : {
"c1" : 100
}
}
}
具有多个匹配的复杂示例
您可以将多个匹配规则组合为更复杂的事件模式。例如,以下事件模式组合在一起anything-but
和numeric
.
{
"time": [ { "prefix": "2017-10-02" } ],
"detail": {
"state": [ { "anything-but": "initializing" } ],
"c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ],
"d-count": [ { "numeric": [ "<", 10 ] } ],
"x-limit": [ { "anything-but": [ 100, 200, 300 ] } ]
}
}
构建事件模式时,如果你多次包含一个密钥,那么最后一个参考将是用于评估事件的参考。例如,对于以下模式:
{ "detail": { "location": [ { "prefix": "us-" } ], "location": [ { "anything-but": "us-east" } ] } }
仅限{ "anything-but": "us-east" }
评估时将考虑location
.