本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
基本概念
Lambda 提供適用於 JavaScript、TypeScript 和 Python SDKs。這些 SDKs是建置耐用函數的基礎,提供您檢查點進度、處理重試和管理執行流程所需的基本概念。如需完整的 SDK 文件和範例,請參閱 GitHub 上的 JavaScript/TypeScript SDK
持久性執行
持久性執行代表 Lambda 持久性函數的完整生命週期,使用檢查點和重播機制來追蹤業務邏輯進度、暫停執行並從失敗中復原。當函數在暫停或中斷後恢復時,會重新播放先前完成的檢查點,且函數會繼續執行。
生命週期可能包含 Lambda 函數的多次調用以完成執行,特別是在暫停或故障復原之後。此方法可讓您的函數長時間執行 (長達一年),同時在中斷的情況下維持可靠的進度。
重播的運作方式
Lambda 會在函數執行時保留所有耐久操作 (步驟、等待和其他操作) 的執行中日誌。當您的函數需要暫停或遇到中斷時,Lambda 會儲存此檢查點日誌並停止執行。當需要繼續時,Lambda 會從頭再次叫用您的函數,並重播檢查點日誌,取代已完成操作的預存值。這表示您的程式碼會再次執行,但先前完成的步驟不會重新執行。而是改用其儲存的結果。
此重播機制對於了解耐用函數至關重要。您的程式碼在重播期間必須具有決定性,這表示它在相同的輸入下會產生相同的結果。避免在步驟之外出現副作用的操作 (例如產生隨機數字或取得目前時間),因為這些操作可能會在重播期間產生不同的值,並導致非確定性的行為。
DurableContext
DurableContext 是您耐用函數接收的內容物件。它提供持久性操作的方法,例如建立檢查點和管理執行流程的步驟和等待。
您的耐用函數會收到 DurableContext而非預設 Lambda 內容:
適用於耐用函數的 Python SDK 使用同步方法,不支援 await。TypeScript SDK 使用 async/await。
步驟
步驟會使用內建重試和自動檢查點來執行商業邏輯。每個步驟都會儲存其結果,確保您的函數可以在中斷後從任何完成的步驟恢復。
等待狀態
等待狀態是您的函數停止執行 (並停止充電) 的計劃暫停,直到繼續為止。使用它們來等待期間、外部回呼或特定條件。
當您的函數遇到等待或需要暫停時,Lambda 會儲存檢查點日誌並停止執行。恢復時,Lambda 會再次叫用您的函數,並重播檢查點日誌,以儲存的值取代已完成的操作。
對於更複雜的工作流程,耐用的 Lambda 函數也隨附進階操作,例如parallel()用於並行執行、map()用於處理陣列、runInChildContext()用於巢狀操作,以及waitForCondition()用於輪詢。如需何時使用每個操作的詳細範例和指引,請參閱範例。
叫用其他 函數
調用允許耐用的函數呼叫其他 Lambda 函數,並等待其結果。呼叫函數會在調用函數執行時暫停,建立保留結果的檢查點。這可讓您建置模組化工作流程,讓專門的 函數處理特定任務。
使用 從耐用函數內context.invoke()呼叫其他函數。調用是檢查點的,因此如果您的函數在調用函數完成後中斷,它會繼續以儲存的結果繼續,而不會重新調用函數。
調用函數可以是耐用或標準 Lambda 函數。如果您叫用持久性函數,呼叫函數會等待完全持久性執行完成。此模式在微服務架構中很常見,其中每個函數都會處理特定網域,讓您從專業、可重複使用的函數編寫複雜的工作流程。
注意
不支援跨帳戶調用。調用函數必須與呼叫函數位於相同的 AWS 帳戶中。
耐用的函數組態
耐用函數具有特定的組態設定,可控制執行行為和資料保留。這些設定與標準 Lambda 函數組態分開,並套用至整個耐久執行生命週期。
DurableConfig 物件會定義耐用函數的組態:
{ "ExecutionTimeout": Integer, "RetentionPeriodInDays": Integer }
Execution timeout (執行逾時)
執行逾時可控制持久性執行從開始到完成的執行時間。這與 Lambda 函數逾時不同,它控制單一函數調用可以執行的時間長度。
當 Lambda 函數通過檢查點、等待和重播時,耐久執行可以跨越多個 Lambda 函數叫用。執行逾時適用於持久性執行的總經過時間,不適用於個別函數叫用。
了解差異
Lambda 函數逾時 (最多 15 分鐘) 會限制函數的每個個別調用。持久性執行逾時 (最長 1 年) 會限制從執行開始到完成、失敗或逾時的總時間。在此期間,您的函數可能會在處理步驟、等待並從失敗中復原時被叫用多次。
例如,如果您將持久執行逾時設定為 24 小時,Lambda 函數逾時設定為 5 分鐘:
每個函數調用必須在 5 分鐘內完成
整個耐久執行最多可執行 24 小時
在這 24 小時內,您的函數可以被叫用多次
等待操作不會計入 Lambda 函數逾時,但會計入執行逾時
您可以使用 Lambda 主控台或 建立耐用函數時 AWS CLI,設定執行逾時 AWS SAM。在 Lambda 主控台中,選擇您的函數,然後選擇組態、持久性執行。以秒為單位設定執行逾時值 (預設值:86400 秒 / 24 小時,最小值:60 秒,最大值:31536000 秒 / 1 年)。
注意
執行逾時和 Lambda 函數逾時的設定不同。Lambda 函數逾時控制每個個別調用可以執行的時間長度 (最長 15 分鐘)。執行逾時可控制整個持久性執行的總經過時間 (最長 1 年)。
保留期間
保留期間控制 Lambda 在持久性執行完成後保留執行歷史記錄和檢查點資料的時間長度。此資料包含步驟結果、執行狀態和完整的檢查點日誌。
保留期間到期後,Lambda 會刪除執行歷史記錄和檢查點資料。您無法再擷取執行詳細資訊或重播執行。保留期會在執行達到結束狀態 (SUCCEEDED、FAILED、STOPPED 或 TIMED_OUT) 時開始。
您可以使用 Lambda 主控台 AWS CLI或 來設定建立耐用函數時的保留期間 AWS SAM。在 Lambda 主控台中,選擇您的函數,然後選擇組態、持久性執行。以天為單位設定保留期間值 (預設值:14 天,下限:1 天,上限:90 天)。
根據您的合規要求、除錯需求和成本考量,選擇保留期。較長的保留期提供更多偵錯和稽核的時間,但會增加儲存成本。