

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Lambda 如何處理非同步調用的錯誤和重試
<a name="invocation-async-error-handling"></a>

Lambda 會管理函數的非同步事件佇列，並在發生錯誤時嘗試重試。依預設，如果函數傳回錯誤，則 Lambda 會嘗試多執行函數兩次，且兩次嘗試之間等候一分鐘，而第二次和第三次嘗試之間等候兩分鐘。函式錯誤包含函式程式碼所傳回的錯誤，以及函式執行時間所傳回的錯誤，例如逾時。

如果函式沒有足夠的並行可用來處理所有事件，則額外請求會遭到調節。依預設，對於調節錯誤 (429) 和系統錯誤 (500 序列)，Lambda 會將事件傳回到佇列，並嘗試再次執行函數長達 6 小時。重試間隔從第一次嘗試後的 1 秒呈指數增加到最多 5 分鐘。如果佇列包含許多項目，Lambda 會增加重試間隔，並降低從佇列讀取事件的速率。

即使您的函數並未傳回錯誤，它也可以從 Lambda 收到相同的事件很多次，因為佇列本身最終一致。如果函式來不及處理傳入事件，也可以從佇列中刪除事件，而不需傳送到函式。確保您的函式程式碼可從容地處理重複的事件，而且您有足夠的並行可用來處理所有調用。

當佇列很長時，新的事件可能會在 Lambda 有機會將其傳送到函數前就已過期。當事件過期時或所有處理嘗試皆失敗時，Lambda 便會捨棄該事件。您可以[設定函數的錯誤處理](invocation-async-configuring.md)，以減少 Lambda 執行的重試次數，或更快地捨棄未處理的事件。若要擷取已捨棄的事件，請為函式[設定無效字母佇列](invocation-async-retain-records.md#invocation-dlq)。若要擷取調用失敗的記錄 (例如逾時或執行時期錯誤)，請[建立失敗時目的地](invocation-async-retain-records.md#invocation-async-destinations)。