簡體   English   中英

當 function 超時時,AWS Lambda 向 SQS 返回 200

[英]AWS Lambda returns 200 to SQS when function times out

解決

人為錯誤。 即使報告了狀態 200,當 function 超時時,消息也沒有被刪除。 我有一個副作用,即從批處理中刪除了單個消息。


我有一個由 SQS 消息調用的 Lambda function。 有時 function 需要很長時間然后超時。

Cloudwatch 報告: Task timed out after 30.54 seconds

這很好,但是由於此超時/錯誤,應該重試 SQS 消息,但在 X-Ray 中我看到 Lambda 有錯誤=true,但響應狀態=200。 這意味着 SQS 消息被刪除。

我可以在 Lambda function 中進行計時,如果代碼花費的時間比超時時間長,則返回錯誤,但是有沒有辦法讓 Lambda 在超時時返回錯誤(而不是狀態 200)?

這些功能是使用無服務器框架設置的:

# the lambda function in serverless.yml
    receiver:
        handler: handler.receiver
        events:
          - sqs:
              batchSize: 10
              arn:
                Fn::GetAtt:
                  - ReceiverQueue
                  - Arn
        memorySize: 2048
        timeout: 30

我們正在努力解決同樣的問題。 我們如何解決它:

  1. lambda 超時由中間件處理( 如何記錄超時 Lambda 調用middy

  2. 我們處理來自 SQS 的這批消息,這里會彈出以下情況:

    一個。 所有消息均已成功處理 - 返回 {statusCode: 200},消息將從 SQS 中刪除

    灣。 一些消息失敗:

    • 我們從 SQS 中刪除成功的消息( deleteMesages
    • 在 lambda function 中拋出錯誤,因此失敗的消息不會從 SQS 中刪除並自動重試,取決於 SQS 的配置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM