選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

搭配 Amazon SQS 使用 Lambda

焦點模式
搭配 Amazon SQS 使用 Lambda - AWS Lambda

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

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

注意

如要將資料傳送到 Lambda 函數以外的目標,或在傳送資料之前讓資料更豐富,請參閱 Amazon EventBridge Pipes

您可以使用 Lambda 函數處理 Amazon Simple Queue Service (Amazon SQS) 佇列中的訊息。Lambda 事件來源映射既支援標準佇列,也支援先進先出 (FIFO) 佇列。Lambda 函數和 Amazon SQS 佇列必須位於相同的 中 AWS 區域,雖然它們可以位於不同的 AWS 帳戶 中。

了解 Amazon SQS 事件來源映射的輪詢和批次處理行為

使用 Amazon SQS 事件來源映射時,Lambda 會輪詢佇列,並在出現事件時同步調用函數。每個事件可以包含佇列中的一批訊息。Lambda 一次接收一個批次的這些事件,並為每個批次調用函數一次。當您的函數成功處理批次時,Lambda 會從佇列中刪除其訊息。

當 Lambda 接收到一個批次時,訊息會留在佇列中,但是在佇列的可見性逾時期間會變成隱藏。如果您的函數成功處理批次中的全部訊息,Lambda 會從佇列中刪除訊息。根據預設,如果函數在處理批次時遇到錯誤,則該批次中的所有訊息會在可見性逾時時間到了之後再次顯示在佇列中。因此,您的函數程式碼必須能夠多次處理相同的訊息,而不會產生副作用。

警告

Lambda 事件來源映射至少會處理每個事件一次,而且可能會重複處理記錄。為避免與重複事件相關的潛在問題,強烈建議您讓函數程式碼具有等冪性。若要進一步了解,請參閱 AWS 知識中心中的如何使 Lambda 函數成為等冪。

若要防止 Lambda 多次處理訊息,您可以設定事件來源映射,在函數回應中包含批次項目失敗,或者可以使用 DeleteMessage API 動作,在 Lambda 函數成功處理訊息時從佇列中移除訊息。

如需 Lambda 支援用於 SQS 事件來源映射的組態參數的詳細資訊,請參閱建立 SQS 事件來源映射

標準佇列訊息事件範例

範例 Amazon SQS 訊息事件 (標準佇列)
{ "Records": [ { "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", "body": "Test message.", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082649183", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082649185" }, "messageAttributes": { "myAttribute": { "stringValue": "myValue", "stringListValues": [], "binaryListValues": [], "dataType": "String" } }, "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue", "awsRegion": "us-east-2" }, { "messageId": "2e1424d4-f796-459a-8184-9c92662be6da", "receiptHandle": "AQEBzWwaftRI0KuVm4tP+/7q1rGgNqicHq...", "body": "Test message.", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082650636", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082650649" }, "messageAttributes": {}, "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue", "awsRegion": "us-east-2" } ] }

依預設,Lambda 會一次輪詢佇列中最多 10 則訊息,並將該批次傳送給函數。為避免調用具有少量記錄的函數,您可設定批次間隔,讓事件來源緩衝記錄最長達五分鐘。調用函數之前,Lambda 會繼續從標準佇列輪詢訊息,直至批次間隔到期、達到調用承載大小配額,或達到設定的批次大小上限為止。

如果您使用的是批次時間範圍,並且您的 SQS 佇列包含非常低的流量,Lambda 可能會等到 20 秒,然後再調用您的函數。即使您將批次時間範圍設定為低於 20 秒也是如此。

注意

在 Java 中,還原序列化 JSON 時可能會遇到 null 指標錯誤。這可能是由於 JSON 物件映射器對「Records」和「eventSourceARN」案例轉換的方式所致。

FIFO 佇列訊息事件範例

對於 FIFO 佇列,記錄包含與重複資料刪除和定序相關的其他屬性。

範例 Amazon SQS 訊息事件 (FIFO 佇列)
{ "Records": [ { "messageId": "11d6ee51-4cc7-4302-9e22-7cd8afdaadf5", "receiptHandle": "AQEBBX8nesZEXmkhsmZeyIE8iQAMig7qw...", "body": "Test message.", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1573251510774", "SequenceNumber": "18849496460467696128", "MessageGroupId": "1", "SenderId": "AIDAIO23YVJENQZJOL4VO", "MessageDeduplicationId": "1", "ApproximateFirstReceiveTimestamp": "1573251510774" }, "messageAttributes": {}, "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:fifo.fifo", "awsRegion": "us-east-2" } ] }

下一個主題:

建立映射

上一個主題:

Secrets Manager
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。