本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Lambda 如何透過非同步叫用處理錯誤和重試
Lambda 會管理函數的非同步事件佇列,並嘗試在發生錯誤時重試。如果函數傳回錯誤,Lambda 預設會嘗試再執行兩次,在前兩次嘗試之間等待一分鐘,第二次嘗試和第三次嘗試之間的兩分鐘。函式錯誤包含函式程式碼所傳回的錯誤,以及函式執行時間所傳回的錯誤,例如逾時。
如果函式沒有足夠的並行可用來處理所有事件,則額外請求會遭到調節。對於節流錯誤 (429) 和系統錯誤 (500 系列),Lambda 會將事件傳回佇列,並依預設嘗試再次執行函數最多 6 小時。重試間隔從第一次嘗試後的 1 秒呈指數增加到最多 5 分鐘。如果佇列包含許多項目,Lambda 會增加重試間隔,並降低從佇列讀取事件的速率。
即使您的函數並未傳回錯誤,它也可以從 Lambda 收到相同的事件很多次,因為佇列本身最終一致。如果函式來不及處理傳入事件,也可以從佇列中刪除事件,而不需傳送到函式。確保您的函式程式碼可從容地處理重複的事件,而且您有足夠的並行可用來處理所有調用。
當佇列很長時,新的事件可能會在 Lambda 有機會將其傳送到函數前就已過期。當事件過期時或所有處理嘗試皆失敗時,Lambda 便會捨棄該事件。您可以設定函數的錯誤處理,以減少 Lambda 執行的重試次數,或更快地捨棄未處理的事件。
您也可以設定 Lambda,將調用記錄傳送到另一個服務。如需詳細資訊,請參閱擷取 Lambda 非同步叫用的記錄。