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

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

了解 Lambda 中的重試行為

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

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

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

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

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

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

    對於非同步叫用,行為與您以同步方式叫用函式時相同。如需詳細資訊,請參閱 使用來自其 AWS 他服務的事件叫用 Lambda 之下的服務特定主題和叫用服務的文件。

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

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