Lambda 異步調用

當您異步調用函數時,Lambda 會將事件發送到隊列。一個單獨的進程會從隊列中讀取事件並運行您的函數。將事件添加到隊列後,Lambda 將返回成功響應,而不返回其餘信息。要異步調用函數,請將調用類型參數設置爲 Eventhtml

輸出文件 (response.json) 不包含任何信息,但運行此命令時仍會建立該文件。若是 Lambda 沒法將事件添加到隊列,則錯誤消息將顯示在命令輸出中。json

Lambda 管理函數的異步調用隊列,並嘗試自動重試失敗的事件。若是函數返回錯誤,Lambda 會嘗試再運行兩次,前兩次嘗試之間等待一分鐘,第二次與第三次之間等待兩分鐘。函數錯誤包括函數代碼返回的錯誤,以及函數運行時返回的錯誤,例如超時。若是全部 3 次嘗試都失敗,Lambda 會將事件發送到死信隊列(若是已配置)。api


      Lambda 會記錄子段中的每次嘗試。

若是該函數沒有足夠的併發可用於處理全部事件,則其餘請求將受到限制。對於限制錯誤 (429) 和系統錯誤(500 系列),Lambda 會將事件返回到隊列並嘗試再次運行該函數長達 6 小時。重試間隔從第一次嘗試後的 1 秒呈指數級增長到最多 5 分鐘,但若是隊列已備份,則可能會更長。Lambda 還下降了從隊列中讀取事件的速率,而且可能沒法讀取隊列中進一步返回的事件。事件能夠位於隊列中的最長時間是 4 天。併發


      限制的請求在 AWS X-Ray 中顯示爲待處理狀態。

即便您的函數沒有返回錯誤,它也可能屢次從 Lambda 接收相同的事件,由於隊列自己具備最終一致性。若是函數沒法跟上傳入事件,則也可能從隊列中刪除事件而不將其發送到函數。確保您的函數代碼正常處理重複事件,而且您有足夠的併發可用於處理全部調用。異步

AWS Lambda 函數死信隊列

當全部三次嘗試處理異步調用失敗後,Lambda 能夠將事件發送到 Amazon SQS 隊列或 Amazon SNS 主題。使用死信隊列配置您的函數,以保存這些事件供進一步處理。async

若是您沒有隊列或主題,請建立一個隊列或主題。選擇與您的使用案例匹配的目標類型。ide

要將事件發送到隊列或主題,您的函數須要其餘權限。添加具備函數執行角色所需權限的策略。

建立目標並更新函數的執行角色後,將死信隊列添加到函數中。您能夠配置多個函數,以便將事件發送到同一目標。

配置死信隊列

  1. 打開 Lambda 控制檯 函數頁面

  2. 選擇函數。

  3. 在 Debugging and error handling (調試和錯誤處理) 下,將 DLQ 資源設置爲 Amazon SQS 或 Amazon SNS

  4. 選擇目標隊列或主題。

  5. 選擇 Save

要經過 AWS CLI 配置死信隊列,請使用 update-function-configuration 命令。

 
$ aws lambda update-function-configuration --function-name my-function \ --dead-letter-config TargetArn=arn:aws:sns:us-east-2:123456789012:my-topicaws lambda update-function-configuration --function-name my-function \ --dead-letter-config TargetArn=arn:aws:sns:us-east-2:123456789012:my-topicarn:aws:sns:us-east-2:123456789012:my-topic

Lambda 按原樣將事件發送到死信隊列,並在屬性中包含其餘信息。您可使用此信息來標識函數返回的錯誤,或將事件與日誌或 AWS X-Ray 跟蹤相關聯。

DLQ 消息屬性

  • RequestID(字符串)– 調用請求的 ID。請求 ID 顯示在函很多天志中。您還可使用 X-Ray 開發工具包在跟蹤中的屬性上記錄請求 ID,而後您能夠在 X-Ray 控制檯中按請求 ID 進行搜索。有關示例,請參閱錯誤處理器示例

  • ErrorCode(數字)– HTTP 狀態代碼。

  • ErrorMessage(字符串)– 錯誤消息的第一個 1 KB 文本塊。


      Amazon SQS 控制檯中的死信隊列事件屬性。

若是 Lambda 沒法向死信隊列發送消息,則會刪除該事件併發出 DeadLetterErrors 指標。之因此發生這種狀況,多是因爲缺乏權限,或者消息的總大小超過目標隊列或主題的限制。例如,若是正文接近 256 KB 的 Amazon SNS 通知觸發致使錯誤的功能,則 Amazon SNS 添加的附加事件數據與 Lambda 添加的屬性相結合,可能會致使消息超過 DLQ 中容許的最大大小。

若是您使用 Amazon SQS 做爲事件源,請在 Amazon SQS 隊列自己上而不是 Lambda 函數上配置 DLQ。

相關文章
相關標籤/搜索