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

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

亚马逊 EventBridge事件模式中的内容过滤

Amazon EventBridge 支持使用事件模式进行声明式内容过滤。通过内容过滤,您可以编写复杂的事件模式,这些模式仅在非常具体的条件下匹配事件。例如,如果事件的字段在特定数值范围内,如果事件来自特定 IP 地址,或者仅当事件 JSON 中不存在特定字段时,您可以创建与事件匹配的事件模式。

重要

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

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

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

前缀匹配

您可以根据事件源中值的前缀来匹配事件。您可以对字符串值使用前缀匹配。

例如,以下事件模式将匹配"time"字段以"2017-10-02"例如开头的任何事件"time": "2017-10-02T18:43:48Z"

{ "time": [ { "prefix": "2017-10-02" } ] }

后缀匹配

您可以根据事件源中值的后缀来匹配事件。您可以对字符串值使用后缀匹配。

例如,以下事件模式将匹配"FileName"字段以.png文件扩展名结尾的任何事件。

{ "FileName": [ { "suffix": ".png" } ] }

Anything-but 匹配

除匹配之@@ 外的任何东西都与规则中提供的内容之外的任何内容都匹配。

除了匹配字符串和数值,包括只包含字符串或仅包含数字的列表,你可以使用任何东西。

以下事件模式显示了除与字符串和数字匹配之外的任何内容。

{ "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 ] } ] } }

以下事件模式显示了除匹配之外的任何与"state"字段"init"中没有前缀的事件相匹配的内容。

注意

除匹配之@@ 外的任何东西都只能使用单个前缀,不能使用列表。

{ "detail": { "state": [ { "anything-but": { "prefix": "init" } } ] } }

数字匹配

数字匹配适用于 JSON 数字值。它仅限于介于 -5.0e9 和 +5.0e9 之间的值,精度为 15 位数或小数点右侧六位数。

以下显示事件模式的数值匹配,该事件模式仅匹配所有字段均为真的事件。

{ "detail": { "c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ], "d-count": [ { "numeric": [ "<", 10 ] } ], "x-limit": [ { "numeric": [ "=", 3.018e2 ] } ] } }

IP 地址匹配

您可以对 IPv4 和 IPv6 地址使用 IP 地址匹配。以下事件模式显示 IP 地址与以 10.0.0 开头并以 0 到 255 之间的数字结尾的 IP 地址匹配。

{ "detail": { "sourceIPAddress": [ { "cidr": "10.0.0.0/24" } ] } }

存在匹配项

是否存在匹配适用于事件 JSON 中是否存在字段。

Exists 匹配仅适用于叶节点。它对于中间节点不起作用。

以下事件模式与任何具有detail.state字段的事件相匹配。

{ "detail": { "state": [ { "exists": true } ] } }

前面的事件模式与以下事件相匹配。

{ "version": "0", "id": "7bf73129-1428-4cd3-a780-95db273d1602", "detail-type": "EC2 Instance State-change Notification", "source": "aws.ec2", "account": "123456789012", "time": "2015-11-11T21:29:54Z", "region": "us-east-1", "resources": ["arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111"], "detail": { "instance-id": "i-abcd1111", "state": "pending" } }

前面的事件模式与以下事件不匹配,因为它没有字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 } } }

Equals-ignore-case 匹配

无论大小写如何,Equals-ignore-case 匹配都适用于字符串值。

以下事件模式匹配任何具有与指定字符串匹配detail-type字段的事件,无论大小写如何。

{ "detail-type": [ { "equals-ignore-case": "ec2 instance state-change notification" } ] }

前面的事件模式与以下事件相匹配。

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

具有$or匹配功能的复杂示例

您还可以创建复杂的事件模式,检查多个字段中是否有任何字段值匹配。$or用于创建匹配多个字段的任何值时匹配的事件模式。

请注意,您可以在$or构造中各个字段的模式匹配中包含其他过滤器类型,例如数字匹配和数组

在满足以下任意条件时,以下事件模式将匹配:

  • c-count字段大于 0 或小于等于 5。

  • d-count字段小于 10。

  • x-limit字段等于 3.018e2。

{ "detail": { "$or": [ { "c-count": [ { "numeric": [ ">", 0, "<=", 5 ] } ] }, { "d-count": [ { "numeric": [ "<", 10 ] } ] }, { "x-limit": [ { "numeric": [ "=", 3.018e2 ] } ] } ] } }
注意

接受事件模式(例如PutRuleCreateArchiveUpdateArchive、和TestEventPattern)的 API 将在超过 1000 个规则组合中抛出 iInvalidEventPatternException f 的使用$or结果。

要确定事件模式中规则组合的数量,请将事件模式中每个$or数组的参数总数相乘。例如,上面的模式包含一个带有三个参数的单个$or数组,因此规则组合的总数也是三个。如果您添加另一个$or包含两个参数的数组,则规则组合总数将为六个。