本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立 Lambda 耐用函數
若要開始使用 Lambda 耐用函數,請使用 Lambda 主控台建立耐用函數。在幾分鐘內,您可以建立和部署耐久的 函數,該函數使用步驟 並等待示範檢查點型執行。
執行教學課程時,您將學習基本的耐久函數概念,例如如何使用 DurableContext 物件、使用步驟建立檢查點,以及使用等待暫停執行。您也將了解當您的函數在等待後恢復時,重播的運作方式。
為了保持簡單,本教學課程說明如何使用 Python 或 Node.js 執行期來建立函數。您可以使用這些轉譯語言,直接在主控台的內建程式碼編輯器中編輯函數程式碼。
使用主控台建立 Lambda 耐用函數
在此範例中,您的耐用函數會使用自動檢查點處理多個步驟的訂單。函數會取得包含訂單 ID 的 JSON 物件、驗證訂單、處理付款,以及確認訂單。每個步驟都會自動檢查點,因此如果函數中斷,則會從上次完成的步驟繼續執行。
您的函數也會示範等待操作,暫停執行一小段時間以模擬等待外部確認。
使用主控台建立耐用的函數
開啟 Lambda 主控台中的 函數頁面。
-
選擇建立函數。
-
選取從頭開始撰寫。
-
在基本資訊窗格中,為函數名稱輸入 myDurableFunction。
-
針對執行期,選擇 Node.js 24 或 Python 3.14。
-
選取啟用持久性執行。
Lambda 會使用包含檢查點操作 (lambda:CheckpointDurableExecution 和 ) 許可的執行角色來建立您的耐用函數lambda:GetDurableExecutionState。
Lambda 執行時間包含持久性執行 SDK,因此您可以測試持久性函數,而無需封裝相依性。不過,我們建議在部署套件中包含 開發套件以供生產。這可確保版本一致性,並避免可能影響函數的潛在執行時間更新。
使用主控台的內建程式碼編輯器來新增您的耐用函數程式碼。
- Node.js
-
若要在主控台中修改程式碼
-
選擇 程式碼 標籤。
在主控台的內建程式碼編輯器中,您應該會看到 Lambda 建立的函數程式碼。如果您在程式碼編輯器中沒看到 index.mjs 標籤,請在檔案總管中選取 index.mjs,如下圖所示。
-
將以下程式碼貼到 index.mjs 標籤中,替換 Lambda 建立的程式碼。
import {
withDurableExecution,
} from "@aws/durable-execution-sdk-js";
export const handler = withDurableExecution(
async (event, context) => {
const orderId = event.orderId;
// Step 1: Validate order
const validationResult = await context.step(async (stepContext) => {
stepContext.logger.info(`Validating order ${orderId}`);
return { orderId, status: "validated" };
});
// Step 2: Process payment
const paymentResult = await context.step(async (stepContext) => {
stepContext.logger.info(`Processing payment for order ${orderId}`);
return { orderId, status: "paid", amount: 99.99 };
});
// Wait for 10 seconds to simulate external confirmation
await context.wait({ seconds: 10 });
// Step 3: Confirm order
const confirmationResult = await context.step(async (stepContext) => {
stepContext.logger.info(`Confirming order ${orderId}`);
return { orderId, status: "confirmed" };
});
return {
orderId: orderId,
status: "completed",
steps: [validationResult, paymentResult, confirmationResult]
};
}
);
-
在 DEPLOY 區段中,選擇部署以更新函數的程式碼:
了解您的耐用函數程式碼
在進行下一個步驟之前,讓我們先查看函數程式碼,並了解關鍵的耐久函數概念。
-
withDurableExecution 包裝函式:
您的耐用函數會包裝在 中withDurableExecution。此包裝函式提供 DurableContext 物件和管理檢查點操作,以啟用持久的執行。
-
DurableContext 物件:
您的函數會收到 ,而不是標準 Lambda 內容DurableContext。此物件提供建立檢查點等耐久操作的方法wait(),例如 step()和 。
-
步驟和檢查點:
每個context.step()呼叫都會在執行前後建立檢查點。如果您的函數中斷,則會從上次完成的檢查點繼續執行。函數不會重新執行完成的步驟。它會改用其儲存的結果。
-
等待操作:
context.wait() 呼叫會暫停執行,而不會耗用運算資源。當等待完成時,Lambda 會再次叫用您的函數,並重播檢查點日誌,以儲存的值取代已完成的步驟。
-
重播機制:
當您的函數在等待或中斷後繼續時,Lambda 會從頭開始執行您的程式碼。不過,已完成的步驟不會重新執行。Lambda 會從檢查點日誌重播其結果。這就是您的程式碼必須具有決定性的原因。
- Python
-
若要在主控台中修改程式碼
-
選擇 程式碼 標籤。
在主控台的內建程式碼編輯器中,您應該會看到 Lambda 建立的函數程式碼。如果您在程式碼編輯器中沒看到 lambda_function.py,請在檔案總管中選取 lambda_function.py,如下圖所示。
-
將以下程式碼貼到 lambda_function.py 標籤中,替換 Lambda 建立的程式碼。
from aws_durable_execution_sdk_python import (
DurableContext,
durable_execution,
durable_step,
)
from aws_durable_execution_sdk_python.config import Duration
@durable_step
def validate_order(step_context, order_id):
step_context.logger.info(f"Validating order {order_id}")
return {"orderId": order_id, "status": "validated"}
@durable_step
def process_payment(step_context, order_id):
step_context.logger.info(f"Processing payment for order {order_id}")
return {"orderId": order_id, "status": "paid", "amount": 99.99}
@durable_step
def confirm_order(step_context, order_id):
step_context.logger.info(f"Confirming order {order_id}")
return {"orderId": order_id, "status": "confirmed"}
@durable_execution
def lambda_handler(event, context: DurableContext):
order_id = event['orderId']
# Step 1: Validate order
validation_result = context.step(validate_order(order_id))
# Step 2: Process payment
payment_result = context.step(process_payment(order_id))
# Wait for 10 seconds to simulate external confirmation
context.wait(Duration.from_seconds(10))
# Step 3: Confirm order
confirmation_result = context.step(confirm_order(order_id))
return {
"orderId": order_id,
"status": "completed",
"steps": [validation_result, payment_result, confirmation_result]
}
-
在 DEPLOY 區段中,選擇部署以更新函數的程式碼:
了解您的耐用函數程式碼
在進行下一個步驟之前,讓我們先查看函數程式碼,並了解關鍵的耐久函數概念。
-
@durable_execution 裝飾項目:
您的處理常式函數以 裝飾@durable_execution。此裝飾項目提供 DurableContext 物件和管理檢查點操作,以啟用持久的執行。
-
@durable_step 裝飾項目:
每個步驟函數都以 裝飾@durable_step。此裝飾項目會將函數標記為建立檢查點的耐久步驟。
-
DurableContext 物件:
您的函數會收到 ,而不是標準 Lambda 內容DurableContext。此物件提供建立檢查點等耐久操作的方法wait(),例如 step()和 。
-
步驟和檢查點:
每個context.step()呼叫都會在執行前後建立檢查點。如果您的函數中斷,則會從上次完成的檢查點繼續執行。函數不會重新執行完成的步驟。它會改用其儲存的結果。
-
等待操作:
context.wait() 呼叫會暫停執行,而不會耗用運算資源。當等待完成時,Lambda 會再次叫用您的函數,並重播檢查點日誌,以儲存的值取代已完成的步驟。
-
Python SDK 是同步的:
請注意,Python SDK 不使用 await。所有耐用的操作都是同步方法呼叫。
使用主控台程式碼編輯器叫用耐用函數
未指定明確版本 (或發佈) 時,主控台會使用$LATEST版本限定詞叫用耐久函數。不過,為了確定性執行程式碼,您必須一律使用指向穩定版本的合格 ARN。
發佈 函數的版本
-
選擇版本索引標籤。
-
選擇 Publish new version (發佈新版本)。
-
針對版本描述,輸入 Initial version(選用)。
-
選擇發布。
-
Lambda 會建立函數的第 1 版。請注意,函數 ARN 現在:1會在結尾包含 ,表示這是第 1 版。
現在建立測試事件以傳送至您的 函數。事件是包含訂單 ID 的 JSON 格式文件。
若要建立測試事件
-
在主控台程式碼編輯器的 TEST EVENTS 區段中,選擇建立測試事件。
-
Event Name (事件名稱) 輸入 myTestEvent。
-
在事件 JSON 區段中,將預設 JSON 取代為下列項目:
{
"orderId": "order-12345"
}
-
選擇儲存。
測試您的耐用函數並檢視執行
在主控台程式碼編輯器的 TEST EVENTS 區段中,選擇測試事件旁邊的執行圖示:
您的耐用函數會開始執行。因為它包含 10 秒的等待時間,初始調用會快速完成,而且函數會在等待期間之後繼續。您可以在持久性執行索引標籤中檢視執行進度。
檢視您的耐久函數執行
-
選擇持久性執行索引標籤。
-
在清單中尋找您的執行。執行會顯示目前狀態 (執行中、成功或失敗)。
-
選擇執行 ID 以檢視詳細資訊,包括:
顯示每個步驟完成時間的執行時間表
檢查點歷史記錄
等待期間
步驟結果
您也可以在 CloudWatch Logs 中檢視函數的日誌,以查看每個步驟的主控台輸出。
若要在 CloudWatch Logs 中檢視函數的調用記錄
-
開啟 CloudWatch 主控台的 日誌群組 頁面。
-
為函數 (/aws/lambda/myDurableFunction) 選擇日誌群組名稱。
-
向下捲動並選擇要查看的函數調用日誌串流。
您應該會看到每次叫用函數的日誌項目,包括初始執行和等待後的重播。
當您從 DurableContext(例如 context.logger或 stepContext.logger) 使用記錄器時,日誌也會出現在 Lambda 主控台的耐久執行和步驟檢視中。這些日誌可能需要一些時間才能載入。
清除
當您完成使用範例耐用函數時,請將其刪除。您還可以刪除存放函數日誌的日誌群組,以及主控台建立的執行角色。
若要刪除 Lambda 函數
-
開啟 Lambda 主控台中的 函數頁面。
-
選擇您建立的函數。
-
選擇 Actions (動作)、Delete (刪除)。
-
在文字輸入欄位中輸入 confirm,然後選擇刪除。
刪除日誌群組
-
開啟 CloudWatch 主控台的 日誌群組 頁面。
-
選取函數的日誌群組 (/aws/lambda/myDurableFunction)。
-
選擇 動作 、刪除日誌群組 。
-
在 刪除日誌群組 對話方塊中,選擇 刪除 。
刪除執行角色
-
開啟 AWS Identity and Access Management (IAM) 主控台的角色頁面。
-
選取函數的執行角色,(例如 myDurableFunction-role-31exxmpl)。
-
選擇 刪除。
-
在刪除角色對話方塊中輸入角色名稱,然後選擇刪除。
其他資源和後續步驟
現在您已使用主控台建立並測試簡單的耐用函數,請採取下列後續步驟:
-
了解耐用函數的常見使用案例,包括分散式交易、訂單處理和人工審核工作流程。請參閱範例。
-
了解如何使用 CloudWatch 指標和執行歷史記錄監控持久的函數執行。請參閱監控和偵錯。
-
了解如何同步和非同步叫用耐久函數,以及管理長時間執行的執行。請參閱叫用耐用函數。
-
遵循撰寫確定性程式碼、管理檢查點大小和最佳化成本的最佳實務。請參閱最佳實務。
-
了解如何在本機和雲端測試耐用的函數。請參閱測試耐用函數。
-
比較耐用的函數與 Step Functions,以了解每個方法最有效的時機。請參閱耐用函數或 Step Functions。