本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
冪等性
耐用的 函數提供內建的冪等性,以便從執行名稱開始執行。當您提供執行名稱時,Lambda 會使用它來防止重複的執行,並啟用呼叫請求的安全重試。根據預設at-least-once執行語意。在重播期間,軟體開發套件會傳回檢查點結果,而無需重新執行完成的步驟,但您的商業邏輯必須等冪才能在完成之前處理潛在的重試。
注意
Lambda 事件來源映射 (ESM) 不支援啟動時的冪等性。因此,每次叫用 (包括重試) 都會啟動新的耐久執行。若要使用事件來源映射確保等冪性執行,請在函數程式碼中實作等冪性邏輯,例如使用 Powertools for, AWS Lambda或使用一般 Lambda 函數做為代理 (分派器),以使用等冪性索引鍵 (執行名稱參數) 叫用耐久的函數。
執行名稱
您可以在叫用耐用函數時提供執行名稱。執行名稱充當等冪性金鑰,可讓您安全地重試調用請求,而無需建立重複的執行。如果您未提供名稱,Lambda 會自動產生唯一的執行 ID。
執行名稱在您的帳戶和區域中必須是唯一的。當您使用已存在的執行名稱叫用函數時,Lambda 行為取決於現有執行的狀態以及承載是否相符。
冪等行為
下表說明 Lambda 如何處理調用請求,取決於您是否提供執行名稱、現有的執行狀態,以及承載是否相符:
| 案例 | 提供的名稱? | 現有執行狀態 | 承載是否相同? | Behavior (行為) |
|---|---|---|---|---|
| 1 | 否 | N/A | N/A | 新的執行已開始:Lambda 會產生唯一的執行 ID 並啟動新的執行 |
| 2 | 是 | 從未存在或保留過期 | N/A | 新的執行已開始:Lambda 使用提供的名稱啟動新的執行 |
| 3 | 是 | 執行中 | 是 | 等冪啟動:Lambda 會傳回現有的執行資訊,而不會啟動重複項目。對於同步調用,這可做為重新連接至執行中的執行 |
| 4 | 是 | 執行中 | 否 | 錯誤:Lambda 傳回DurableExecutionAlreadyExists錯誤,因為具有此名稱的執行已在使用不同的承載執行 |
| 5 | 是 | 關閉 (成功、失敗、停止或逾時) | 是 | 等冪啟動:Lambda 會傳回現有的執行資訊,而不啟動新的執行。傳回已關閉的執行結果 |
| 6 | 是 | 關閉 (成功、失敗、停止或逾時) | 否 | 錯誤:Lambda 傳回DurableExecutionAlreadyExists錯誤,因為具有此名稱的執行已在不同的承載下完成 |
注意
案例 3 和 5 示範等冪行為,其中 Lambda 透過傳回現有的執行資訊而非建立重複項目,安全地處理重複的調用請求。
步驟冪等性
根據預設at-least-once執行語意。當您的函數在等待、回呼或失敗後重播時,軟體開發套件會根據檢查點日誌檢查每個步驟。對於已完成的步驟,開發套件會傳回檢查點結果,而不會重新執行步驟邏輯。不過,如果步驟失敗或函數在步驟完成之前中斷,則該步驟可能會執行多次。
步驟內的商業邏輯必須等冪來處理潛在的重試。使用等冪性金鑰,以確保付款或資料庫寫入等操作只會執行一次,即使步驟重試也一樣。如需如何編寫冪等性程式碼的詳細資訊,請參閱持久性執行 SDK 開發人員指南中的冪等性和重試。 AWS