View a markdown version of this page

为订阅者筛选事件 - Amazon EventBridge
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

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

为订阅者筛选事件

过滤器选择订阅者接收的事件。使用一个或多个过滤器将 a 附加FilterConfiguration到订阅者,每个过滤器命名 EventBridge 事件模式语法Pattern中的 a Scope 和 a。例如,具有该模式的DATA过滤器仅{"detail":{"amount":[{"numeric":[">",500]}]}}交付已发布的 500 个以上的订单PutEvents。本页描述了过滤器模型;有关模式运算符,请参阅亚马逊 EventBridge 事件模式。订阅者过滤器不支持通配符匹配。

过滤的工作原理

每个过滤器都有两个部分:aScope,这是过滤器检查的事件的一部分(DATAMETADATA、或SYSTEM_METADATA;参见事件结构:数据、元数据和系统元数据);aPattern,以 JSON 字符串形式提供的事件模式。 EventBridge 将配置中的过滤器与 AND 相结合:在订阅者收到之前,事件必须匹配每个过滤器。没有的订阅者FilterConfiguration接收所有事件。

三个范围

DATA

检查事件数据。因为PutRawEvents,数据就是你发送的有效载荷。因为PutEvents,数据就是 EventBridge 信封,而你的Detail则嵌套在detail密钥下面。DATA过滤器支持除通配符之外的所有事件模式运算符。 EventBridge 将application/protobuf事件反序列application/avro化为 JSON,DATA过滤器会像检查任何 JSON 事件一样检查该 JSON。application/octet-stream事件没有过滤器可以读取的数据,因此拥有过滤器的订阅者永远不会匹配DATA过滤器;METADATASYSTEM_METADATA过滤器仍然可以对其起作用。

METADATA

检查出版商设置的键值对。Metadata PutRawEventsMETADATA过滤器仅匹配精确值:模式中的每个值必须是精确值的 JSON 数组,$or并且不支持prefixnumeric、exists、和等运算符。要使用这些运算符,请筛选DATA或SYSTEM_METADATA。一个PutEvents事件没有发布者元数据,因此METADATA过滤器永远不会与之匹配。

SYSTEM_METADATA

检查下表中列出的事件字段 EventBridge 集。SYSTEM_METADATA过滤器支持除通配符之外的所有事件模式运算符。 EventBridge 生成的字段带有前aws:缀。

字段说明现身
ContentType事件数据的内容类型每场活动
DeduplicationId重复数据删除标识符每场活动
EventGroupId活动组每场活动
aws:EventId EventBridge 分配的标识符每场活动
aws:IngestionTime EventBridge 收到活动时每场活动
aws:SequenceNumber EventBridge 分配的序列号每场活动
aws:DeliveryTypeLIVE 或 REPLAY每场已举办的活动
aws:SchemaId注册表中的架构标识符:Glue 的版本 UUID,Confluent 的整数Avro 和 Protobuf 活动
aws:RegistryTypeGlue 或 ConfluentAvro 和 Protobuf 活动
aws:Source事件的来源PutEvents、 Amazon 服务和 SaaS 合作伙伴活动
aws:DetailType事件的详细信息类型PutEvents、 Amazon 服务和 SaaS 合作伙伴活动
注意

要筛选 Amazon 服务事件或 SaaS 合作伙伴事件,请使用aws:Source和aws:DetailType。 EventBridge 写入这些字段,任何发布调用都无法设置以此开头的来源aws.,因此它们可以识别事件的经过验证的来源。请勿将事件数据中的source和detail-type字段用于此目的;任何发布商都可以写入这些字段。请参阅自定义事件总线的事件源。

示例:筛选使用发布的事件 PutRawEvents

PutRawEvents发布内容类型的有效负载。DATA过滤器直接匹配负载,METADATA过滤器匹配发布者的元数据地图。以下配置每个范围都有一个过滤器;只有当所有三个过滤器都匹配时,订阅者才会收到事件:有效负载超过 500,元数据密钥region为EU,内容类型为 JSON。amount

{ "Filters": [ { "Scope": "DATA", "Pattern": "{\"amount\":[{\"numeric\":[\">\",500]}]}" }, { "Scope": "METADATA", "Pattern": "{\"region\":[\"EU\"]}" }, { "Scope": "SYSTEM_METADATA", "Pattern": "{\"ContentType\":[\"application/json\"]}" } ] }

示例:筛选使用发布的事件 PutEvents

PutEvents在 EventBridge 信封中发布一个事件,该活动以条目的Source、、DetailTypeResourcesTime、和为基础构建Detail。DATA过滤器与该信封相匹配,您的Detail嵌套在下方detail。该事件ContentType是application/eventbridge+json、aws:Sourceaws:DetailType来自参赛作品的Source和DetailType,信封也暴露sourcedetail-type在DATA范围内。当详细信息超过 500 且来源为 500 时,以下配置匹配com.myapp.storage。amount

{ "Filters": [ { "Scope": "DATA", "Pattern": "{\"detail\":{\"amount\":[{\"numeric\":[\">\",500]}]}}" }, { "Scope": "SYSTEM_METADATA", "Pattern": "{\"aws:Source\":[\"com.myapp.storage\"]}" } ] }

示例:筛选来自事件源的事件

事件源采集的事件会以 EventBridge 信封的形式到达,发起的服务或合作伙伴也在信封中aws:Source。要仅接收针对一个存储桶的 Amazon S3 对象创建的事件,请将中的SYSTEM_METADATA服务和中的存储桶进行匹配。DATA对于合作伙伴,将合作伙伴事件源名称进行匹配,例如与 prefix on 相匹配aws.partner/example.com。

{ "Filters": [ { "Scope": "SYSTEM_METADATA", "Pattern": "{\"aws:Source\":[\"aws.s3\"]}" }, { "Scope": "DATA", "Pattern": "{\"detail-type\":[\"Object Created\"],\"detail\":{\"bucket\":{\"name\":[\"amzn-s3-demo-bucket\"]}}}" } ] }

行为和极限

  • AND 组合:事件必须匹配配置中的每个过滤器。

  • 无过滤器:没有过滤器配置的订阅者接收所有事件。

  • 每个作用域一个过滤器:一个配置为每个范围最多包含一个过滤器,因此最多有三个过滤器。 EventBridge 拒绝具有两个相同范围过滤器的配置。

  • 通配符:wildcard运算符和anything-but带有通配符的运算符被拒绝,消息过滤器模式不得包含通配符匹配器(通配符,除通配符之外的任何东西)。

  • 带有$or:的模式组合会 EventBridge 拒绝$or使用产生超过 1,000 个模式组合的过滤器。将每个数$or组中的参数数相乘:一个由三个组成的数组给出三种组合,第二个由两个组成的数组给出六个组合。

  • 大小:配置中的所有过滤器在三个作用域中共享一个 4,096 字节的限制。

  • 图案形状:DATA模式的根部可以有一个数组;METADATA并且SYSTEM_METADATA模式必须是 JSON 对象。创建或更新订阅者时,无效 JSON 的模式将被拒绝。

  • 更改:订阅者的筛选条件可以在任何滚动 24 小时内更改 24 次;请参阅更新、暂停和恢复订阅者。

为错误的形状编写的图案不会失败;它什么都不匹配。在依赖订阅者之前,发布一个应该匹配的事件和一个不应该匹配的事件,然后在目标上检查这两个事件。