

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

# 了解 Lambda 中的重試行為
<a name="invocation-retries"></a>

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

當您間接叫用函式時，您需要留意叫用端的重試行為及任何遭遇請求的服務。這包括以下案例。
+ **Asynchronous invocation** (非同步叫用) - Lambda 會重試函數錯誤兩次。如果函數沒有足夠的容量來處理所有傳入的請求，事件可能在佇列中等待數小時才會傳送到函數。您可以在函式上設定無效信件佇列，以擷取未成功處理的事件。如需更多詳細資訊，請參閱 [新增無效字母佇列](invocation-async-retain-records.md#invocation-dlq)。
+ **Event source mappings** (事件來源映射) - 從串流中讀取的事件來源映射會重試整批項目。在錯誤解決或項目過期前，重複的錯誤會阻礙受影響碎片的處理。若要偵測已停滯的碎片，您可以監控[反覆運算器年齡](monitoring-metrics.md)指標。

  對於從佇列讀取的事件來源映射，您可藉由設定來源佇列的可見性逾時和再驅動政策，決定重試之間的時間長度和失敗事件的目的地。如需詳細資訊，請參閱 [Lambda 如何處理來自串流和佇列式事件來源的記錄](invocation-eventsourcemapping.md) 和 [使用來自其他服務的事件叫用 Lambda AWS](lambda-services.md) 下的服務特定主題。
+ **AWS 服務** – AWS 服務可以[同步](invocation-sync.md)或非同步地調用您的函式。對於同步叫用，服務會決定是否要重試。例如，如果 Lambda 函數傳回 `TemporaryFailure` 回應代碼，則 Amazon S3 批次操作會重試該操作。代理來自上游使用者或用戶端之請求的服務可能有重試策略，或可能會將錯誤回應轉送回請求者。例如，API Gateway 一律會將錯誤回應轉送回請求者。

  對於非同步調用，無論調用來源為何，重試邏輯都相同。依預設，Lambda 最多會重試失敗的非同步調用兩次。如需更多詳細資訊，請參閱 [Lambda 如何處理非同步調用的錯誤和重試](invocation-async-error-handling.md)。
+ **Other accounts and clients** (其他帳戶和用戶端) - 當您授與其他帳戶的存取權時，您可使用[以資源為基礎的政策](access-control-resource-based.md)來限制其可設定的服務或資源，以叫用您的函數。為了保護您的函數以免過載，請考慮透過 [Amazon API Gateway](services-apigateway.md) 在您的函數前面放置 API 層。

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