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

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

在 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-butnumeric.

{ "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.