本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon EventBridge 管道中的事件過濾
使用 EventBridge 管道,您可以過濾給定源的事件,並僅處理其中的一個子集。此篩選的運作方式與在 EventBridge 事件匯流排或 Lambda 事件來源對應上篩選相同,方法是使用事件模式。如需有關事件模式的詳細資訊,請參閱 Amazon EventBridge 事件模式。
篩選條件標準 FilterCriteria
物件是由篩選條件清單 (Filters
) 組成的結構。每個篩選條件均是定義事件篩選模式 (Pattern
) 的結構。A 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
物件外部的任何欄位,例如 partitionKey
或 sequenceNumber
。
Kinesis 事件上的資料屬性是 data
物件外部的任何欄位,例如 City
或 Temperature
。
當您進行篩選以符合此事件時,您可以在解碼欄位上使用篩選器。例如,要過濾 partitionKey
和 City
, 您可以使用以下過濾器:
{ "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。
對於 AmazonSQS,消息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 捨棄訊息或擲回例外狀況。下表摘要說明特定行為:
傳入資料格式 (data 或 dynamodb ) |
資料屬性的篩選條件模式格式 | 產生的動作 |
---|---|---|
有效期 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
。對於阿帕奇卡夫卡來源(Amazon MSK 和自我管理的 Apache 卡夫卡),有兩個消息字段:和. key
value
EventBridge 刪除與過濾器中包含的所有字段不匹配的郵件。對於 Apache Kafka,在成功調用函數後 EventBridge 提交匹配和不匹配的消息的偏移量。對於 Amazon MQ,在成功叫用函數後 EventBridge 確認符合的訊息,並在篩選不相符的訊息時確認這些訊息。
阿帕奇卡夫卡和 Amazon MQ 消息必須是 UTF -8 個編碼的字符串,無論是純字符串還是格式。JSON這是因為在應用過濾條件之前,將 Apache 卡夫卡和 Amazon MQ 字節數組 EventBridge 解碼為 UTF -8。如果您的郵件使用其他編碼 (例如 UTF -16 或)ASCII,或郵件格式與格式不相符,則只會 EventBridge 處理中繼資料篩選器。FilterCriteria
下表摘要說明特定行為:
傳入訊息格式 (data 或 key 和 value ) |
訊息屬性的篩選條件模式格式 | 產生的動作 |
---|---|---|
純文字的字串 |
純文字的字串 |
EventBridge 根據您的篩選條件進行篩選。 |
純文字的字串 |
資料屬性沒有篩選條件模式 |
EventBridge 根據您的篩選條件篩選 (僅限其他中繼資料屬性)。 |
純文字的字串 |
有效期 JSON |
EventBridge 根據您的篩選條件篩選 (僅限其他中繼資料屬性)。 |
有效期 JSON |
純文字的字串 |
EventBridge 根據您的篩選條件篩選 (僅限其他中繼資料屬性)。 |
有效期 JSON |
資料屬性沒有篩選條件模式 |
EventBridge 根據您的篩選條件篩選 (僅限其他中繼資料屬性)。 |
有效期 JSON |
有效期 JSON |
EventBridge 根據您的篩選條件進行篩選。 |
非 UTF -8 編碼字符串 |
JSON,普通字符串,或沒有模式 |
EventBridge 根據您的篩選條件篩選 (僅限其他中繼資料屬性)。 |
Lambda ESM 和 EventBridge 管道之間的差異
篩選事件時,Lambda ESM 和 EventBridge 管道的運作方式通常相同。主要區別在於有ESM效載荷中不存在該eventSourceKey
字段。
在管篩選器中使用比較運算子
比較運算子可讓您建構符合事件中欄位值的事件模式。
若要取得支援在管篩選中使用的比較運算子的完整清單,請參閱〈〉比較運算子。