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