本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 傳送的欄位進行篩選,而不是輪詢作業新增的欄位。下列欄位不能用於事件模式:
awsRegioneventSourceeventSourceARNeventVersioneventIDeventNameinvokeIdentityArneventSourceKey
下列各節說明每個支援事件來源類型的篩選行為。
篩選 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 篩選條件。 |
|
沒有 的篩選條件模式 |
純文字的字串 |
以您的篩選條件標準為依據的 EventBridge 篩選條件。 |
|
沒有 的篩選條件模式 |
有效的 JSON |
以您的篩選條件標準為依據的 EventBridge 篩選條件。 |
篩選 Kinesis 和 DynamoDB 訊息
您的篩選條件標準處理 Kinesis 或 DynamoDB 記錄後,串流迭代器將向前移動超過此記錄。如果記錄不滿足篩選條件標準,則無需從事件來源中手動刪除記錄。保留期之後,Kinesis 和 DynamoDB 會自動刪除這些舊記錄。如果希望更快地刪除記錄,請參閱變更資料保留期間。
若要正確篩選來自串流事件來源的事件,資料欄位和資料欄位的篩選條件標準都必須是有效的 JSON 格式。(若為 Kinesis,資料欄位為 data。若為 DynamoDB,資料欄位為 dynamodb。) 如果其中一個欄位不是有效的 JSON 格式,則 EventBridge 會捨棄訊息或擲回例外狀況。下表摘要說明特定行為:
| 篩選條件模式 格式 | 傳入格式 | 結果 |
|---|---|---|
|
有效的 JSON |
有效的 JSON |
以您的篩選條件標準為依據的 EventBridge 篩選條件。 |
|
有效的 JSON |
非 JSON |
EventBridge 捨棄訊息。 |
|
|
有效的 JSON |
以您的篩選條件標準為依據的 EventBridge 篩選條件。 |
|
|
非 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),則有兩個訊息欄位:key 和 value。
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 篩選條件,忽略 |
|
有效的 JSON |
純文字的字串 |
僅中繼資料上的 EventBridge 篩選條件,忽略 |
|
有效的 JSON |
有效的 JSON |
以您的篩選條件標準為依據的 EventBridge 篩選條件。 |
|
|
純文字的字串 |
僅中繼資料上的 EventBridge 篩選條件,忽略 |
|
|
有效的 JSON |
僅中繼資料上的 EventBridge 篩選條件,忽略 |
|
任何 |
非 UTF 編碼字串 |
僅中繼資料上的 EventBridge 篩選條件,忽略 |
Lambda ESM 和 EventBridge 管道之間的差異
篩選事件時,Lambda ESM 和 EventBridge 管道的運作方式通常相同。主要區別在於 ESM 有效載荷中不存在該 eventSourceKey 欄位。
在管道篩選條件中使用比較運算子
比較運算子可讓您建構符合事件中欄位值的事件模式。
如需支援在管道篩選條件中使用的比較運算子完整清單,請參閱 比較運算子。