

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

# 耐久執行 SDK
<a name="durable-execution-sdk"></a>

耐用執行 SDK 是建置耐用函數的基礎。它為檢查點進度、處理重試和管理執行流程提供基本概念。開發套件可抽象化檢查點管理和重播的複雜性，讓您撰寫可自動容錯的循序程式碼。

開發套件適用於 JavaScript、TypeScript、Python 和 Java。如需完整的 API 文件、快速入門教學課程和特定語言指南，請參閱[AWS 持久性執行 SDK 開發人員指南](https://docs.aws.amazon.com/durable-execution/)。

## 開發套件的功能
<a name="durable-sdk-what-it-does"></a>

**檢查點管理：**軟體開發套件會在函數執行耐久操作時自動建立檢查點。每個檢查點都會記錄操作類型、輸入和結果。當您的函數完成步驟時，SDK 會保留檢查點再繼續。這可確保您的函數可以在中斷時從任何已完成的操作恢復。

**重播協調：**當函數在暫停或中斷後恢復時，軟體開發套件會執行重播。它會從頭開始執行程式碼，但會略過已完成的操作，使用儲存的檢查點結果，而不是重新執行它們。SDK 可確保重播是確定性的。假設輸入和檢查點日誌相同，您的函數會產生相同的結果。

**狀態隔離：**SDK 會與您的業務邏輯分開維護執行狀態。每個持久性執行都有自己的檢查點日誌，其他執行無法存取。SDK 會加密靜態檢查點資料，並確保狀態在重播之間保持一致。

如需檢查點如何運作和重播行為的詳細說明，請參閱 AWS 《持久性執行開發套件開發人員指南》中的[關鍵概念](https://docs.aws.amazon.com/durable-execution/getting-started/key-concepts/)。

## 耐久性操作
<a name="durable-sdk-operations"></a>

開發套件為您的函數提供 `DurableContext` 物件。此內容會取代標準 Lambda 內容，並提供建立檢查點、管理執行流程以及與外部系統協調的方法。

`DurableContext` 提供下列用於建置耐用工作流程的操作：


| 作業 | Description | 
| --- | --- | 
| [Step (步驟)](https://docs.aws.amazon.com/durable-execution/sdk-reference/operations/step/) | 使用可設定的重試策略和執行語意來執行並檢查點一個工作單位。 | 
| [等候](https://docs.aws.amazon.com/durable-execution/sdk-reference/operations/wait/) | 在指定期間內暫停執行，而不耗用運算資源。 | 
| [等待條件](https://docs.aws.amazon.com/durable-execution/sdk-reference/operations/wait-for-condition/) | 輪詢在嘗試之間具有自動檢查點的條件。 | 
| [回呼](https://docs.aws.amazon.com/durable-execution/sdk-reference/operations/callback/) | 暫停執行並等待外部系統透過 Lambda API 提供輸入。 | 
| [Invoke](https://docs.aws.amazon.com/durable-execution/sdk-reference/operations/invoke/) | 透過自動檢查點，呼叫另一個 Lambda 函數並等待其結果。 | 
| [平行](https://docs.aws.amazon.com/durable-execution/sdk-reference/operations/parallel/) | 與可設定的完成政策同時執行多個操作。 | 
| [Map](https://docs.aws.amazon.com/durable-execution/sdk-reference/operations/map/) | 使用選用並行控制同時處理集合中的每個項目。 | 
| [子內容](https://docs.aws.amazon.com/durable-execution/sdk-reference/operations/child-context/) | 建立隔離的執行內容，以分組多個操作。 | 

每個耐用的操作都會自動建立檢查點，確保您的函數可以隨時恢復。如需詳細的 API 參考、程式碼範例和特定語言的使用方式，請參閱《 AWS 耐久執行 SDK 開發人員指南》中的 SDK [參考](https://docs.aws.amazon.com/durable-execution/sdk-reference/)。

## 如何計量耐久性操作
<a name="durable-operations-checkpoint-consumption"></a>

您透過 呼叫的每個耐用操作都會`DurableContext`建立檢查點，以追蹤執行進度並存放狀態資料。這些操作會根據其用量產生費用，而檢查點可能包含對您的資料寫入和保留成本有所貢獻的資料。儲存的資料包括調用事件資料、步驟傳回的承載，以及完成回呼時傳遞的資料。了解耐用操作的計量方式，可協助您預估執行成本並最佳化工作流程。如需定價的詳細資訊，請參閱 [Lambda 定價頁面](https://aws.amazon.com/lambda/pricing/)。

承載大小是指持久性操作持續的序列化資料大小。資料是以位元組為單位測量，大小可能會因 操作使用的序列化程式而有所不同。操作的承載可能是成功完成的結果本身，如果操作失敗，可能是序列化錯誤物件。

### 基本操作
<a name="durable-operations-basic"></a>

基本操作是耐用函數的基本建置區塊：


| 作業 | 檢查點計時 | 操作數量 | 資料持續存在 | 
| --- | --- | --- | --- | 
| 執行 | 已開始 | 1 | 輸入承載大小 | 
| 執行 | 已完成 Succeeded/Failed/Stopped) | 0 | 輸出承載大小 | 
| Step (步驟) | Retry/Succeeded/Failed | 1 \+ N 次重試 | 每次嘗試傳回的承載大小 | 
| 等候 | 已開始 | 1 | N/A | 
| WaitForCondition | 每次輪詢嘗試 | 1 \+ N 輪詢 | 每次輪詢嘗試傳回的承載大小 | 
| 調用層級重試 | 已開始 | 1 | 錯誤物件的承載 | 

### 回呼操作
<a name="durable-operations-callbacks"></a>

回呼操作可讓您的函數暫停並等待外部系統提供輸入。這些操作會在建立回呼和完成時建立檢查點：


| 作業 | 檢查點計時 | 操作數量 | 資料持續存在 | 
| --- | --- | --- | --- | 
| CreateCallback | 已開始 | 1 | N/A | 
| 透過 API 呼叫完成回呼 | 已完成 | 0 | 回呼承載 | 
| WaitForCallback | 已開始 | 3 \+ N 次重試 （內容 \+ 回呼 \+ 步驟） | 提交者步驟嘗試傳回的承載，加上兩個回呼承載副本 | 

### 複合操作
<a name="durable-operations-compound"></a>

複合操作結合多個耐久操作，以處理複雜的協調模式，例如平行執行、陣列處理和巢狀內容：


| 作業 | 檢查點計時 | 操作數量 | 資料持續存在 | 
| --- | --- | --- | --- | 
| 平行 | 已開始 | 1 \+ N 個分支 (1 個父內容 \+ N 個子內容） | 每個分支最多兩個傳回承載大小的副本，以及每個分支的狀態 | 
| Map | 已開始 | 1 \+ N 個分支 (1 個父內容 \+ N 個子內容） | 每次反覆運算傳回的承載大小最多兩個副本，加上每次反覆運算的狀態 | 
| Promise 協助程式 | 已完成 | 1 | 從 promise 傳回的承載大小 | 
| RunInChildContext | 成功/失敗 | 1 | 從子內容傳回的承載大小 | 

對於內容，例如來自 `runInChildContext`或由複合操作內部使用，小於 256 KB 的結果會直接檢查點。不會儲存較大的結果，而是透過重新處理內容的操作，在重播期間重建結果。