Amazon P EventBridge ipes 中的事件筛选 - Amazon EventBridge

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

Amazon P EventBridge ipes 中的事件筛选

使用 Pip EventBridge es,您可以过滤给定源的事件并仅处理其中的一部分。这种筛选的工作方式与使用事件模式对 EventBridge 事件总线或 Lambda 事件源映射进行筛选的方式相同。有关事件模式的更多信息,请参阅 创建 Amazon EventBridge 事件模式

筛选标准 FilterCriteria 对象是由筛选条件 Filters 列表组成的结构。每个过滤器都是一个定义过滤模式 (Pattern) 的结构。Pattern 是 JSON 筛选条件规则的字符串表示。FilterCriteria 对象与以下示例类似:

{ "Filters": [ {"Pattern": "{ \"Metadata1\": [ pattern1 ], \"data\": { \"Data1\": [ pattern2 ] }}" } ] }

为了更清楚起见,以下是在纯 JSON 中展开的筛选条件 Pattern 的值。

{ "Metadata1": [ pattern1 ], "data": {"Data1": [ pattern2 ]} }

亚马逊 Kinesis、亚马逊 MQ、亚马逊 MSK 和自我管理 Apache Kafka 对有效负载应用 Base64 编码,但不对元数据字段应用 Base64 编码。例如,假设你的 Kinesis 直播包含这样的事件:

{ "kinesisSchemaVersion": "1.0", "partitionKey": "1", "sequenceNumber": "49590338271490256608559692538361571095921575989136588898", "data": {"City": "Seattle", "State": "WA", "Temperature": "46", "Month": "December" }, "approximateArrivalTimestamp": 1545084650.987 }

当事件流经您的管道时,采用 base64 编码 data 字段将如下所示:

{ "kinesisSchemaVersion": "1.0", "partitionKey": "1", "sequenceNumber": "49590338271490256608559692538361571095921575989136588898", "data": "SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==", "approximateArrivalTimestamp": 1545084650.987, "eventSource": "aws:kinesis", "eventVersion": "1.0", "eventID": "shardId-000000000006:49590338271490256608559692538361571095921575989136588898", "eventName": "aws:kinesis:record", "invokeIdentityArn": "arn:aws:iam::123456789012:role/lambda-role", "awsRegion": "us-east-2", "eventSourceARN": "arn:aws:kinesis:us-east-2:123456789012:stream/lambda-stream" }

创建事件过滤器时,Pi EventBridge pes 可以访问事件内容。这些内容要么是 JSON 转义的,例如 Amazon SQS body 字段,要么是 base64 编码的,例如 Kinesis data 字段。如果您的数据是有效的 JSON,则您的输入模板或目标参数的 JSON 路径可以直接引用内容,因为 Pip EventBridge es 会自动对其进行解码。例如,如果 Kinesis 事件源是有效的 JSON,您可以使用 <$.data.someKey> 引用变量。

继续我们的示例,要筛选对象外部的未编码partitionKey元数据和data对象内部的 base64 编码City属性,您可以使用以下过滤器:data

{ "partitionKey": [ "1" ], "data": { "City": [ "Seattle" ] } }

创建事件模式时,您可以根据源 API 发送的字段进行筛选,而不是根据轮询操作添加的字段进行筛选。以下字段不能用于事件模式:

  • awsRegion

  • eventSource

  • eventSourceARN

  • eventVersion

  • eventID

  • eventName

  • invokeIdentityArn

  • eventSourceKey

以下各节说明了每种支持的事件源类型的筛选行为。

筛选 Amazon SQS 消息

如果 Amazon SQS 消息不符合您的筛选标准,则 EventBridge 会自动将该消息从队列中删除。您无需在 Amazon SQS 中手动删除这些消息。将多个管道连接到一个 SQS 队列不太可能是一个有用的设置——这些管道将争夺如果不匹配就会被丢弃的消息。

Amazon SQS 消息正文可以包含任何字符串,而不仅仅是 JSON。 EventBridge Pipes 希望您的FilterCriteria格式与传入消息的格式相匹配,可以是有效的 JSON,也可以是纯字符串。如果不匹配,Pip EventBridge es 就会丢弃该消息。如果您FilterCriteria不包含body,这意味着您只能按元数据进行筛选,Pip EventBridge es 会跳过此检查。下表汇总了评估结果:

筛选条件模式 格式 传入格式 结果

纯字符串

纯字符串

EventBridge 根据您的筛选条件进行筛选。

纯字符串

有效 JSON

EventBridge 丢弃消息。

有效 JSON

纯字符串

EventBridge 丢弃消息。

有效 JSON

有效 JSON

EventBridge 根据您的筛选条件进行筛选。

没有过滤器图案 body

纯字符串

EventBridge 根据您的筛选条件进行筛选。

没有过滤器图案 body

有效 JSON

EventBridge 根据您的筛选条件进行筛选。

筛选 Kinesis 和 DynamoDB 消息

在筛选标准处理了 Kinesis 或 DynamoDB 记录后,流迭代器会跳过此记录。如果记录不符合筛选标准,您无需从事件源手动删除记录。保留期结束后,Kinesis 和 DynamoDB 会自动删除这些旧记录。如果您希望提前删除记录,请参阅更改数据保留期

要正确筛选流事件源中的事件,数据字段和数据字段的筛选条件都必须为有效的 JSON 格式。(对于 Kinesis,数据字段为 data。对于 DynamoDB,数据字段为 dynamodb。) 如果任一字段都不是有效的 JSON 格式,则 EventBridge 会丢弃该消息或引发异常。下表汇总了具体行为:

筛选条件模式 格式 传入格式 结果

有效 JSON

有效 JSON

EventBridge 根据您的筛选条件进行筛选。

有效 JSON

非 JSON

EventBridge 丢弃消息。

data(Kinesis) 或 (dynamodbDynamoDB) 没有筛选模式

有效 JSON

EventBridge 根据您的筛选条件进行筛选。

data(Kinesis) 或 (dynamodbDynamoDB) 没有筛选模式

非 JSON

EventBridge 根据您的筛选条件进行筛选。

非 JSON

任何

EventBridge 在创建或更新 Pipe 时会引发异常。过滤器模式必须是有效的 JSON 格式。

筛选亚马逊托管流媒体 Apache Kafka、自我管理 Apache Kafka 和亚马逊 MQ 消息

注意

将筛选标准附加到具有 Apache Kafka 或 Amazon MQ 事件源的管道后,将筛选规则应用到事件最多可能需要 15 分钟。

对于 Amazon MQ 来源,消息字段为 data。对于 Apache Kafka 源(Amazon MSK自托管 Apache Kafka),有两个消息字段:keyvalue

EventBridge 丢弃与过滤器中包含的所有字段不匹配的邮件。对于 Apache Kafka,成功调用目标后,为匹配和不匹配的消息 EventBridge 提交偏移量。对于 Amazon MQ,在成功调用该函数后 EventBridge 确认匹配的消息,并在筛选不匹配的消息时确认这些消息。

Apache Kafka 和 Amazon MQ 消息必须是 UTF-8 编码的字符串,可以是纯字符串或 JSON 格式。那是因为在应用筛选条件之前,将 Apache Kafka 和 Amazon MQ 字节数组 EventBridge 解码为 UTF-8。如果您的消息使用其他编码(例如 UTF-16 或 ASCII),或者消息格式与格式不匹配,则仅 EventBridge 处理元数据过滤器。FilterCriteria下表汇总了具体行为:

筛选条件模式 格式 传入格式 结果

纯字符串

纯字符串

EventBridge 根据您的筛选条件进行筛选。

纯字符串

有效 JSON

EventBridge 仅筛选元数据,忽略data字段 (Amazon MQ) 或keyvalue字段 (Apache Kafka)

有效 JSON

纯字符串

EventBridge 仅筛选元数据,忽略data字段 (Amazon MQ) 或keyvalue字段 (Apache Kafka)

有效 JSON

有效 JSON

EventBridge 根据您的筛选条件进行筛选。

data(亚马逊 MQ)或key和(Apache Kafk value a)没有筛选模式

纯字符串

EventBridge 仅筛选元数据,忽略data字段 (Amazon MQ) 或keyvalue字段 (Apache Kafka)

data(亚马逊 MQ)或key和(Apache Kafk value a)没有筛选模式

有效 JSON

EventBridge 仅筛选元数据,忽略data字段 (Amazon MQ) 或keyvalue字段 (Apache Kafka)

任何

非 UTF 编码的字符串

EventBridge 仅筛选元数据,忽略data字段 (Amazon MQ) 或keyvalue字段 (Apache Kafka)

Lambda ESM 和 Pipes 之间的区别 EventBridge

筛选事件时,Lambda ESM 和 Pip EventBridge es 的操作方式通常相同。主要区别在于 ESM 有效负载中不存在 eventSourceKey 字段。

在管道筛选器中使用比较运算符

比较运算符使您能够构造与事件中的字段值匹配的事件模式。

有关支持在管道筛选器中使用的比较运算符的完整列表,请参阅比较运算符