當您異步調用函數時,Lambda 會將事件發送到隊列。一個單獨的進程會從隊列中讀取事件並運行您的函數。將事件添加到隊列後,Lambda 將返回成功響應,而不返回其餘信息。要異步調用函數,請將調用類型參數設置爲 Event
。html
輸出文件 (response.json
) 不包含任何信息,但運行此命令時仍會建立該文件。若是 Lambda 沒法將事件添加到隊列,則錯誤消息將顯示在命令輸出中。json
Lambda 管理函數的異步調用隊列,並嘗試自動重試失敗的事件。若是函數返回錯誤,Lambda 會嘗試再運行兩次,前兩次嘗試之間等待一分鐘,第二次與第三次之間等待兩分鐘。函數錯誤包括函數代碼返回的錯誤,以及函數運行時返回的錯誤,例如超時。若是全部 3 次嘗試都失敗,Lambda 會將事件發送到死信隊列(若是已配置)。api
若是該函數沒有足夠的併發可用於處理全部事件,則其餘請求將受到限制。對於限制錯誤 (429) 和系統錯誤(500 系列),Lambda 會將事件返回到隊列並嘗試再次運行該函數長達 6 小時。重試間隔從第一次嘗試後的 1 秒呈指數級增長到最多 5 分鐘,但若是隊列已備份,則可能會更長。Lambda 還下降了從隊列中讀取事件的速率,而且可能沒法讀取隊列中進一步返回的事件。事件能夠位於隊列中的最長時間是 4 天。併發
即便您的函數沒有返回錯誤,它也可能屢次從 Lambda 接收相同的事件,由於隊列自己具備最終一致性。若是函數沒法跟上傳入事件,則也可能從隊列中刪除事件而不將其發送到函數。確保您的函數代碼正常處理重複事件,而且您有足夠的併發可用於處理全部調用。異步
當全部三次嘗試處理異步調用失敗後,Lambda 能夠將事件發送到 Amazon SQS 隊列或 Amazon SNS 主題。使用死信隊列配置您的函數,以保存這些事件供進一步處理。async
若是您沒有隊列或主題,請建立一個隊列或主題。選擇與您的使用案例匹配的目標類型。ide
Amazon SQS 隊列 – 隊列會保存失敗的事件,直到它們被檢索爲止。您能夠手動檢索事件,也能夠配置 Lambda 以從隊列中讀取並調用函數。函數
在 Amazon SQS 控制檯中,建立一個隊列。工具
Amazon SNS 主題 – 主題將失敗的事件中繼到一個或多個目標。您能夠配置主題以將事件發送到電子郵件地址、Lambda 函數或 HTTP 終端節點。開發工具
在 Amazon SNS 控制檯中,建立一個主題。
要將事件發送到隊列或主題,您的函數須要其餘權限。添加具備函數執行角色所需權限的策略。
Amazon SQS – sqs:SendMessage
Amazon SNS – sns:Publish
建立目標並更新函數的執行角色後,將死信隊列添加到函數中。您能夠配置多個函數,以便將事件發送到同一目標。
配置死信隊列
打開 Lambda 控制檯 函數頁面。
選擇函數。
在 Debugging and error handling (調試和錯誤處理) 下,將 DLQ 資源設置爲 Amazon SQS 或 Amazon SNS。
選擇目標隊列或主題。
選擇 Save。
要經過 AWS CLI 配置死信隊列,請使用 update-function-configuration
命令。
$aws lambda update-function-configuration --function-name my-function \ --dead-letter-config TargetArn=
aws lambda update-function-configuration --function-name my-function \ --dead-letter-config TargetArn=arn:aws:sns:us-east-2:123456789012:my-topic
arn:aws:sns:us-east-2:123456789012:my-topic
arn: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 文本塊。
若是 Lambda 沒法向死信隊列發送消息,則會刪除該事件併發出 DeadLetterErrors 指標。之因此發生這種狀況,多是因爲缺乏權限,或者消息的總大小超過目標隊列或主題的限制。例如,若是正文接近 256 KB 的 Amazon SNS 通知觸發致使錯誤的功能,則 Amazon SNS 添加的附加事件數據與 Lambda 添加的屬性相結合,可能會致使消息超過 DLQ 中容許的最大大小。
若是您使用 Amazon SQS 做爲事件源,請在 Amazon SQS 隊列自己上而不是 Lambda 函數上配置 DLQ。