Amazon EventBridge 管道過濾 - Amazon EventBridge

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

Amazon EventBridge 管道過濾

使用 P EventBridge ipes,您可以篩選指定來源的事件,並僅處理其中的一個子集。此篩選的運作方式與在 EventBridge 事件匯流排或 Lambda 事件來源對應上篩選相同,方法是使用事件模式。如需有關事件模式的詳細資訊,請參閱 Amazon EventBridge 事件模式

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

{ "Filters": [ {"Pattern": "{ \"Metadata1\": [ rule1 ], \"data\": { \"Data1\": [ rule2 ] }}" } ] }

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

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

FilterCriteria 物件共有兩個主要部份:中繼資料屬性和資料屬性。

  • 中繼資料屬性是事件物件的欄位。在範例中,FilterCriteria.Metadata1 表示中繼資料屬性。

  • 資料屬性是事件主體的欄位。在範例中,FilterCriteria.Data1 表示資料屬性。

例如,假設您的 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" }

Kinesis 事件上的中繼資料屬性data 物件外部的任何欄位,例如 partitionKeysequenceNumber

Kinesis 事件上的資料屬性data 物件外部的任何欄位,例如 CityTemperature

當您進行篩選以符合此事件時,您可以在解碼欄位上使用篩選器。例如,要過濾 partitionKeyCity, 您可以使用以下過濾器:

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

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

建立事件模式時,您可以根據來源 API 傳送的欄位進行篩選,而不是輪詢作業新增的欄位。下列欄位不能用於事件模式:

  • awsRegion

  • eventSource

  • eventSourceARN

  • eventVersion

  • eventID

  • eventName

  • invokeIdentityArn

  • eventSourceKey

訊息和資料欄位

每個 EventBridge 管道源包含一個包含核心消息或數據的字段。我們將這些稱為消息字段或資料字段。這些字段是特殊的,因為它們可能是 JSON 轉義或 base64 編碼,但是當它們是有效的 JSON 時,它們可以使用 JSON 模式進行過濾,就好像主體未被轉義一樣。這些字段的內容也可以無縫地在輸入變壓器中使用。

正確篩選 Amazon SQS 訊息

如果 Amazon SQS 訊息不符合您的篩選條件, EventBridge 會自動從佇列中移除訊息。您不需要在 Amazon SQS 中手動刪除這些訊息。

針對 Amazon SQS,訊息 body 可以是任何字串。但是,如果您的 FilterCriteria 預期 body 為有效的 JSON 格式,這就會造成問題。反之亦然 — 如果傳入的訊息 body 是有效的 JSON 格式,但您的選條件標準預期 body 應為純字串,則此可能會導致意外的行為。

為了避免此問題,請確定 FilterCriteria 中的 body 之格式與從佇列收到的訊息中的 body 之預期格式相符。篩選郵件之前, EventBridge 會自動評估內送郵件的格式body和篩選器模式body。如果有不相符項目,請 EventBridge 捨棄訊息。下表摘要說明此評估:

傳入訊息 body 格式 篩選條件模式 body 格式 產生的動作

純文字的字串

純文字的字串

EventBridge 根據您的篩選條件進行篩選。

純文字的字串

資料屬性沒有篩選條件模式

EventBridge 根據您的篩選條件篩選 (僅限其他中繼資料屬性)。

純文字的字串

有效的 JSON

EventBridge 刪除消息。

有效的 JSON

純文字的字串

EventBridge 刪除消息。

有效的 JSON

資料屬性沒有篩選條件模式

EventBridge 根據您的篩選條件篩選 (僅限其他中繼資料屬性)。

有效的 JSON

有效的 JSON

EventBridge 根據您的篩選條件進行篩選。

如果您不包含body為您的一部分FilterCriteria,則 EventBridge 略過此檢查。

正確篩選 Kinesis 和 DynamoDB 訊息

您的篩選條件標準處理 Kinesis 或 DynamoDB 記錄後,串流迭代器將向前移動超過此記錄。如果記錄不滿足篩選條件標準,則無需從事件來源中手動刪除記錄。保留期之後,Kinesis 和 DynamoDB 會自動刪除這些舊記錄。如果希望更快地刪除記錄,請參閱變更資料保留期間

若要正確篩選來自串流事件來源的事件,資料欄位和資料欄位的篩選條件標準都必須是有效的 JSON 格式。(若為 Kinesis,資料欄位為 data。若為 DynamoDB,資料欄位為 dynamodb。) 如果其中一個欄位不是有效的 JSON 格式,請 EventBridge 捨棄訊息或擲回例外狀況。下表摘要說明特定行為:

傳入資料格式 (datadynamodb) 資料屬性的篩選條件模式格式 產生的動作

有效的 JSON

有效的 JSON

EventBridge 根據您的篩選條件進行篩選。

有效的 JSON

資料屬性沒有篩選條件模式

EventBridge 根據您的篩選條件篩選 (僅限其他中繼資料屬性)。

有效的 JSON

非 JSON

EventBridge 在管道或更新時拋出異常。資料屬性的篩選條件模式必須是有效的 JSON 格式。

非 JSON

有效的 JSON

EventBridge 刪除記錄。

非 JSON

資料屬性沒有篩選條件模式

EventBridge 根據您的篩選條件篩選 (僅限其他中繼資料屬性)。

非 JSON

非 JSON

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

針對 Apache Kafka、自我管理的 Apache Kafka 和 Amazon MQ 訊息,正確地篩選由 Amazon 管理的串流

若為 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 卡夫卡和 Amazon MQ 位元組陣列 EventBridge 解碼為 UTF-8。如果您的郵件使用其他編碼 (例如 UTF-16 或 ASCII),或郵件格式與格式不相符,則只會 EventBridge 處理中繼資料篩選器。FilterCriteria下表摘要說明特定行為:

傳入訊息格式 (datakeyvalue) 訊息屬性的篩選條件模式格式 產生的動作

純文字的字串

純文字的字串

EventBridge 根據您的篩選條件進行篩選。

純文字的字串

資料屬性沒有篩選條件模式

EventBridge 根據您的篩選條件篩選 (僅限其他中繼資料屬性)。

純文字的字串

有效的 JSON

EventBridge 根據您的篩選條件篩選 (僅限其他中繼資料屬性)。

有效的 JSON

純文字的字串

EventBridge 根據您的篩選條件篩選 (僅限其他中繼資料屬性)。

有效的 JSON

資料屬性沒有篩選條件模式

EventBridge 根據您的篩選條件篩選 (僅限其他中繼資料屬性)。

有效的 JSON

有效的 JSON

EventBridge 根據您的篩選條件進行篩選。

非 UTF-8 編碼字串

JSON、純字串或沒有模式

EventBridge 根據您的篩選條件篩選 (僅限其他中繼資料屬性)。

Lambda ESM 和 EventBridge 管道之間的差異

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