在 EventBridge 中创建事件模式 - Amazon EventBridge

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

在 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 规则。可以包括用引号(")括起来的字符串、数字和关键字 truefalsenull

  • 对于字符串,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 的行为,不应认为它会保持不变。