本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 EventBridge 中创建事件模式
要创建事件模式,您要指定希望事件模式匹配的事件字段。仅指定用于匹配的字段。
例如,以下事件模式示例仅提供三个字段的值:顶级字段 "source"
和 "detail-type"
,以及 "detail"
对象字段内的 "state"
字段。应用规则时,EventBridge 会忽略事件中的所有其他字段。
{
"source": ["aws.ec2"],
"detail-type": ["EC2 Instance State-change Notification"],
"detail": {
"state": ["terminated"]
}
}
要使事件模式匹配事件,事件必须包含模式中列出的所有字段名。字段名必须还显示在具有相同嵌套结构的事件中。
在编写事件模式来匹配事件时,您可以使用 TestEventPattern
API 或 test-event-pattern
CLI 命令测试模式是否匹配正确的事件。有关更多信息,请参阅 TestEventPattern。
匹配事件值
在事件模式中,要匹配的值在 JSON 数组中,用方括号(“[”、“]”)括起,因此您可以提供多个值。例如,要匹配来自 Amazon EC2 或 AWS Fargate 的事件,您可以使用以下模式,该模式匹配 "source"
字段值为 "aws.ec2"
或 "aws.fargate"
的事件。
{
"source": ["aws.ec2", "aws.fargate"]
}
有关更多信息,请参阅 与多个字段值进行匹配。
在 Amazon EventBridge 事件模式中使用比较运算符
Amazon EventBridge 支持使用事件模式进行声明性内容筛选。通过内容筛选,您可以编写仅在非常具体的条件下匹配事件的复杂事件模式。例如,您可以创建事件模式,在以下情况下与事件匹配:
-
事件的某个字段在特定的数值范围内。
-
事件来自特定 IP 地址。
-
事件 JSON 中不存在特定字段。
有关更多信息,请参阅 比较运算符。
创建事件模式时的注意事项
构造事件模式时需要考虑以下事项:
EventBridge 会忽略未包含在事件模式中的事件字段。结果是,事件模式中没有出现的字段用
"*": "*"
通配符表示。事件模式匹配的值遵循 JSON 规则。可以包括用引号(")括起来的字符串、数字和关键字
true
、false
和null
。对于字符串,EventBridge 使用精确的逐个字符匹配,而不进行小写化或任何其他字符串标准化。
对于数值,EventBridge 也使用字符串表示。例如,300、300.0 和 3.0e2 不相等。
如果为同一 JSON 字段指定了多个模式,则 EventBridge 仅使用最后一个模式。
-
请注意,当 EventBridge编 译事件模式以供使用时,会使用点 (.) 作为连接字符。
这意味着 EventBridge 会将以下事件模式视为相同:
## has no dots in keys { "detail" : { "state": { "status": [ "running" ] } } } ## has dots in keys { "detail" : { "state.status": [ "running" ] } }
这两个事件模式都将匹配以下两个事件:
## has no dots in keys { "detail" : { "state": { "status": "running" } } } ## has dots in keys { "detail" : { "state.status": "running" } }
注意
这描述了当前 EventBridge 的行为,不应认为它会保持不变。
-
包含重复字段的事件模式无效。如果模式包含重复字段,EventBridge 仅考虑最终字段值。
例如,以下事件模式将匹配同一个事件:
## has duplicate keys { "source": ["aws.s3"], "source": ["aws.sns"], "detail-type": ["AWS API Call via CloudTrail"], "detail": { "eventSource": ["s3.amazonaws.com"], "eventSource": ["sns.amazonaws.com"] } } ## has unique keys { "source": ["aws.sns"], "detail-type": ["AWS API Call via CloudTrail"], "detail": { "eventSource": ["sns.amazonaws.com"] } }
而且 EventBridge 将以下两个事件视为相同:
## has duplicate keys { "source": ["aws.s3"], "source": ["aws.sns"], "detail-type": ["AWS API Call via CloudTrail"], "detail": [ { "eventSource": ["s3.amazonaws.com"], "eventSource": ["sns.amazonaws.com"] } ] } ## has unique keys { "source": ["aws.sns"], "detail-type": ["AWS API Call via CloudTrail"], "detail": [ { "eventSource": ["sns.amazonaws.com"] } ] }
注意
这描述了当前 EventBridge 的行为,不应认为它会保持不变。