View a markdown version of this page

Amazon EventBridge 管道中的事件篩選 - Amazon EventBridge

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon EventBridge 管道中的事件篩選

使用 EventBridge 管道,您可以篩選指定來源的事件,並僅處理部分事件。此篩選的運作方式與使用事件模式篩選 EventBridge 事件匯流排或 Lambda 事件來源映射對應的運作方式相同。如需有關事件模式的詳細資訊,請參閱 建立 Amazon EventBridge 事件模式

篩選條件標準 FilterCriteria 物件是由篩選條件清單 (Filters) 組成的結構。每個篩選條件都是定義篩選模式的結構 (Pattern)。Pattern 是 JSON 篩選條件規則的字串表示法。FilterCriteria 物件看起來正如下列範例:

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

補充說明,此處是篩選條件的 Pattern 在純文字 JSON 中擴展的值:

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

Amazon Kinesis、Amazon MQ、Amazon MSK 和自我管理 Apache Kafka 會將 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" }

當您建立事件篩選條件時,EventBridge 管道可以存取事件內容。此內容可能是 JSON 逸出,例如 Amazon SQS body 欄位或以 base64 編碼 (例如 Kinesis data 欄位)。如果您的資料是有效的 JSON,則目標參數的輸入範本或 JSON 路徑可以直接參考內容,因為 EventBridge 管道會自動解碼內容。例如,如果 Kinesis 事件來源是有效的 JSON,您可以使用 <$.data.someKey> 參考變數。

繼續我們的範例,若要篩選data物件外部的未編碼partitionKey中繼資料,以及data物件內部的 base64 編碼City屬性,您可以使用下列篩選條件:

{ "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 管道預期您的FilterCriteria格式符合傳入訊息的格式,無論是有效的 JSON 或純字串。如果不相符,EventBridge 管道會捨棄訊息。如果您的 FilterCriteria不包含 body,表示您僅依中繼資料篩選,EventBridge 管道會略過此檢查。下表摘要說明評估:

篩選條件模式 格式 傳入格式 結果

純文字的字串

純文字的字串

以您的篩選條件標準為依據的 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) 或 dynamodb(DynamoDB) 沒有篩選條件模式

有效的 JSON

以您的篩選條件標準為依據的 EventBridge 篩選條件。

data (Kinesis) 或 dynamodb(DynamoDB) 沒有篩選條件模式

非 JSON

以您的篩選條件標準為依據的 EventBridge 篩選條件。

非 JSON

任何

EventBridge 在管道建立或更新時擲回例外狀況。篩選條件模式必須是有效的 JSON 格式。

篩選 Amazon Managed Streaming for Apache Kafka、自我管理 Apache Kafka 和 Amazon 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 格式。這是因為 EventBridge 會在套用篩選條件之前,將 Apache Kafka 和 Amazon MQ 位元組陣列解碼成 UTF-8。如果您的訊息使用其他編碼方式,例如 UTF-16 或 ASCII,或者訊息格式與 FilterCriteria 格式不相符,則 EventBridge 只會處理中繼資料篩選條件。下表摘要說明特定行為:

篩選條件模式 格式 傳入格式 結果

純文字的字串

純文字的字串

以您的篩選條件標準為依據的 EventBridge 篩選條件。

純文字的字串

有效的 JSON

僅中繼資料上的 EventBridge 篩選條件,忽略 data 欄位 (Amazon MQ) 或 keyvalue 欄位 (Apache Kafka)

有效的 JSON

純文字的字串

僅中繼資料上的 EventBridge 篩選條件,忽略 data 欄位 (Amazon MQ) 或 keyvalue 欄位 (Apache Kafka)

有效的 JSON

有效的 JSON

以您的篩選條件標準為依據的 EventBridge 篩選條件。

data (Amazon MQ) 或 keyvalue(Apache Kafka) 沒有篩選條件模式

純文字的字串

僅中繼資料上的 EventBridge 篩選條件,忽略 data 欄位 (Amazon MQ) 或 keyvalue 欄位 (Apache Kafka)

data (Amazon MQ) 或 keyvalue(Apache Kafka) 沒有篩選條件模式

有效的 JSON

僅中繼資料上的 EventBridge 篩選條件,忽略 data 欄位 (Amazon MQ) 或 keyvalue 欄位 (Apache Kafka)

任何

非 UTF 編碼字串

僅中繼資料上的 EventBridge 篩選條件,忽略 data 欄位 (Amazon MQ) 或 keyvalue 欄位 (Apache Kafka)

Lambda ESM 和 EventBridge 管道之間的差異

篩選事件時,Lambda ESM 和 EventBridge 管道的運作方式通常相同。主要區別在於 ESM 有效載荷中不存在該 eventSourceKey 欄位。

在管道篩選條件中使用比較運算子

比較運算子可讓您建構符合事件中欄位值的事件模式。

如需支援在管道篩選條件中使用的比較運算子完整清單,請參閱 比較運算子