本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
透過 Amazon 事件來源使用SQS事件篩選
您可以使用事件篩選來控制 Lambda 將哪些記錄從串流或佇列中傳送至函數。如需事件篩選如何運作的一般資訊,請參閱控制 Lambda 傳送給函數的事件。
本節著重於 Amazon 事件來源的MSK事件篩選。
Amazon SQS 事件篩選基礎
假設您的 Amazon SQS 佇列包含以下JSON格式的訊息。
{ "RecordNumber": 1234, "TimeStamp": "yyyy-mm-ddThh:mm:ss", "RequestCode": "AAAA" }
此佇列的範例記錄如下所示。
{ "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", "body": "{\n "RecordNumber": 1234,\n "TimeStamp": "yyyy-mm-ddThh:mm:ss",\n "RequestCode": "AAAA"\n}", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082649183", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082649185" }, "messageAttributes": {}, "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-west-2:123456789012:my-queue", "awsRegion": "us-west-2" }
若要根據 Amazon SQS 訊息的內容進行篩選,請使用 Amazon SQS 訊息記錄中的body
金鑰。假設你只想處理那些記錄,其RequestCode
中你的 Amazon SQS 消息是「BBBB。」 FilterCriteria
物件如下所示。
{ "Filters": [ { "Pattern": "{ \"body\" : { \"RequestCode\" : [ \"BBBB\" ] } }" } ] }
為了增加清晰度,以下是以普通方式Pattern
擴展過濾器的值JSON。
{ "body": { "RequestCode": [ "BBBB" ] } }
您可以使用控制台 AWS CLI 或 AWS SAM 模板添加過濾器。
假設您希望函數僅處理 RecordNumber
大於 9999 的記錄。FilterCriteria
物件如下所示。
{ "Filters": [ { "Pattern": "{ \"body\" : { \"RecordNumber\" : [ { \"numeric\": [ \">\", 9999 ] } ] } }" } ] }
為了增加清晰度,以下是以普通方式Pattern
擴展過濾器的值JSON。
{ "body": { "RecordNumber": [ { "numeric": [ ">", 9999 ] } ] } }
您可以使用控制台 AWS CLI 或 AWS SAM 模板添加過濾器。
對於 AmazonSQS,消息正文可以是任何字符串。但是,如果您FilterCriteria
希望body
使用有效的JSON格式,則可能會出現問題。相反的情況也是 true — 如果內送郵件內文的JSON格式,但您的篩選準則預期body
為純字串,這可能會導致非預期的行為。
為了避免此問題,請確定 FilterCriteria
中的內文格式與從佇列收到的訊息中的 body
之預期格式相符。篩選訊息之前,Lambda 會自動評估傳入訊息內文之格式和 body
的篩選條件模式之格式。如果有不相符的情形,Lambda 就會捨棄訊息。下表摘要說明此評估:
傳入訊息 body 格式 |
篩選條件模式 body 格式 |
產生的動作 |
---|---|---|
純文字的字串 |
純文字的字串 |
根據您的篩選條件標準之 Lambda 篩選條件。 |
純文字的字串 |
資料屬性沒有篩選條件模式 |
Lambda 篩選條件 (僅限其他中繼資料屬性) 會根據您的篩選條件標準而定。 |
純文字的字串 |
有效 JSON |
Lambda 捨棄訊息。 |
有效 JSON |
純文字的字串 |
Lambda 捨棄訊息。 |
有效 JSON |
資料屬性沒有篩選條件模式 |
Lambda 篩選條件 (僅限其他中繼資料屬性) 會根據您的篩選條件標準而定。 |
有效 JSON |
有效 JSON |
根據您的篩選條件標準之 Lambda 篩選條件。 |