了解 Lambda 中的重試行為 - AWS Lambda

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

了解 Lambda 中的重試行為

直接叫用函數時,您可以決定處理函數程式碼相關錯誤的策略。Lambda 不會自動代您重試這類錯誤。若要進行重試,您可以手動重新叫用函數、將失敗的事件傳送到佇列進行偵錯,或忽略錯誤。您函式的程式碼可能已完全執行、部分執行或完全未執行。如果您重試,請確保您函式的程式碼可處理相同的事件很多次,而不會導致重複的交易或其他不想要的副作用。

當您間接叫用函式時,您需要留意叫用端的重試行為及任何遭遇請求的服務。這包括以下案例。

  • Asynchronous invocation (非同步叫用) - Lambda 會重試函數錯誤兩次。如果函數沒有足夠的容量來處理所有傳入的請求,事件可能會在佇列中等待數小時才能傳送至函數。您可以在函式上設定無效信件佇列,以擷取未成功處理的事件。如需詳細資訊,請參閱異步調用一個 Lambda 函數

  • Event source mappings (事件來源映射) - 從串流中讀取的事件來源映射會重試整批項目。在錯誤解決或項目過期前,重複的錯誤會阻礙受影響碎片的處理。若要偵測已停滯的碎片,您可以監控反覆運算器年齡指標。

    對於從佇列讀取的事件來源映射,您可藉由設定來源佇列的可見性逾時和再驅動政策,決定重試之間的時間長度和失敗事件的目的地。如需詳細資訊,請參閱 Lambda 如何處理來自串流和佇列型事件來源的記錄使用來自其他服務的事件叫用 Lambda AWS 下的服務特定主題。

  • AWS 服務- AWS 服務可以同步或異調用您的功能。對於同步叫用,服務會決定是否要重試。例如,如果 Lambda 函數傳回 TemporaryFailure 回應代碼,則 Amazon S3 批次操作會重試該操作。來自上游使用者或用戶端的 Proxy 要求的服務可能有重試策略,或可能會將錯誤回應轉送回要求者。例如,APIGateway 一律會將錯誤回應轉送回要求者。

    對於異步調用,無論調用源如何,重試邏輯都是相同的。根據預設,Lambda 會重試失敗的非同步叫用,最多可重試兩次。如需詳細資訊,請參閱Lambda 如何透過非同步叫用處理錯誤和重試

  • Other accounts and clients (其他帳戶和用戶端) - 當您授與其他帳戶的存取權時,您可使用以資源為基礎的政策來限制其可設定的服務或資源,以叫用您的函數。為了保護您的功能免於過載,請考慮在 Amazon API Gateway 的功能前面放置一個API圖層。

為了協助您處理 Lambda 應用程式中的錯誤,Lambda 會與 Amazon CloudWatch 和 AWS X-Ray. 您可以結合使用日誌、指標、警示和追蹤,快速偵測並識別函數程式碼或其他支援應用程式的資源中的問題。API如需詳細資訊,請參閱監控與疑難排解 Lambda 函數