View a markdown version of this page

建立 Lambda 耐用函數 - AWS Lambda

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

建立 Lambda 耐用函數

若要開始使用 Lambda 耐用函數,請使用 Lambda 主控台建立耐用函數。在幾分鐘內,您可以建立和部署耐用的 函數,該函數使用步驟 並等待示範檢查點型執行。

您也可以使用 AWS CLI或基礎設施做為程式碼 (IaC) 來建立耐用的函數。

執行教學課程時,您將學習基本的耐用函數概念,例如如何使用 DurableContext 物件、使用步驟建立檢查點,以及使用等待暫停執行。您也將了解當您的函數在等待後繼續時,重播的運作方式。

為了保持簡單,本教學課程說明如何使用 Python 或 Node.js 執行期來建立函數。您可以使用這些轉譯語言,直接在主控台的內建程式碼編輯器中編輯函數程式碼。

注意

耐用函數目前支援 Python、Node.js (JavaScript/TypeScript) 和 Java 執行期,以及容器映像 (OCI)。如需支援執行時間版本和容器映像選項的完整清單,請參閱耐用函數支援的執行時間。如需搭配 Lambda 使用容器映像的詳細資訊,請參閱《Lambda 開發人員指南》中的建立 Lambda 容器映像。

提示

若要了解如何建置無伺服器解決方案,請參閱無伺服器開發人員指南。

使用主控台建立 Lambda 耐用函數

在此範例中,您的耐用函數會使用自動檢查點處理多個步驟的訂單。函數會取得包含訂單 ID 的 JSON 物件、驗證訂單、處理付款,以及確認訂單。每個步驟都會自動檢查點,因此如果函數中斷,則會從上次完成的步驟繼續執行。

您的函數也會示範等待操作,暫停執行一小段時間以模擬等待外部確認。

使用主控台建立耐用的函數
  1. 開啟 Lambda 主控台中的 函數頁面。

  2. 選擇建立函數。

  3. 選取從頭開始撰寫。

  4. 在基本資訊窗格中,為函數名稱輸入 myDurableFunction。

  5. 針對執行期,選擇 Node.js 24 或 Python 3.14。

  6. 選取啟用持久性執行。

Lambda 會使用包含檢查點操作 (lambda:CheckpointDurableExecution 和 ) 許可的執行角色來建立您的耐用函數lambda:GetDurableExecutionState。

注意

Lambda 執行時間包含持久性執行 SDK,因此您可以測試持久性函數,而無需封裝相依性。不過,我們建議在部署套件中包含 開發套件以供生產。這可確保版本一致性,並避免可能影響函數的潛在執行時間更新。

使用主控台的內建程式碼編輯器來新增您的耐用函數程式碼。

Node.js
若要在主控台中修改程式碼
  1. 選擇 程式碼 標籤。

    在主控台的內建程式碼編輯器中,您應該會看到 Lambda 建立的函數程式碼。如果您在程式碼編輯器中沒看到 index.mjs 標籤,請在檔案總管中選取 index.mjs,如下圖所示。

    顯示主控台程式碼編輯器和檔案總管中 index.mjs 檔案的圖表。
  2. 將以下程式碼貼到 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] }; } );
  3. 在 DEPLOY 區段中,選擇部署以更新函數的程式碼:

    Lambda 主控台程式碼編輯器中的「部署」按鈕
了解您的耐用函數程式碼

在進行下一個步驟之前,讓我們先查看函數程式碼,並了解關鍵的耐久函數概念。

  • withDurableExecution 包裝函式:

    您的耐用函數會包裝在 中withDurableExecution。此包裝函式提供 DurableContext 物件和管理檢查點操作,以啟用持久的執行。

  • DurableContext 物件:

    您的函數會收到 ,而不是標準 Lambda 內容DurableContext。此物件提供建立檢查點等耐久操作的方法wait(),例如 step()和 。

  • 步驟和檢查點:

    每個context.step()呼叫都會在執行前後建立檢查點。如果您的函數中斷,則會從上次完成的檢查點繼續執行。函數不會重新執行完成的步驟。它會改用其儲存的結果。

  • 等待操作:

    context.wait() 呼叫會暫停執行,而不會耗用運算資源。當等待完成時,Lambda 會再次叫用您的函數,並重播檢查點日誌,以儲存的值取代已完成的步驟。

  • 重播機制:

    當您的函數在等待或中斷後繼續時,Lambda 會從頭開始執行您的程式碼。不過,已完成的步驟不會重新執行。Lambda 會從檢查點日誌重播其結果。這就是您的程式碼必須具有決定性的原因。

Python
若要在主控台中修改程式碼
  1. 選擇 程式碼 標籤。

    在主控台的內建程式碼編輯器中,您應該會看到 Lambda 建立的函數程式碼。如果您在程式碼編輯器中沒看到 lambda_function.py,請在檔案總管中選取 lambda_function.py,如下圖所示。

    顯示主控台程式碼編輯器和檔案總管中 lambda_function.py 檔案的圖表。
  2. 將以下程式碼貼到 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] }
  3. 在 DEPLOY 區段中,選擇部署以更新函數的程式碼:

    Lambda 主控台程式碼編輯器中的「部署」按鈕
了解您的耐用函數程式碼

在進行下一個步驟之前,讓我們先查看函數程式碼,並了解關鍵的耐久函數概念。

  • @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。

發佈函數的版本
  1. 選擇版本索引標籤。

  2. 選擇 Publish new version (發佈新版本)。

  3. 針對版本描述,輸入 Initial version(選用)。

  4. 選擇發布。

  5. Lambda 會建立函數的第 1 版。請注意,函數 ARN 現在:1會在結尾包含 ,表示這是第 1 版。

現在建立測試事件以傳送至您的 函數。事件是包含訂單 ID 的 JSON 格式文件。

若要建立測試事件
  1. 在主控台程式碼編輯器的 TEST EVENTS 區段中,選擇建立測試事件。

    在 Lambda 主控台程式碼編輯器中建立測試事件按鈕
  2. Event Name (事件名稱) 輸入 myTestEvent。

  3. 在事件 JSON 區段中,將預設 JSON 取代為下列項目:

    { "orderId": "order-12345" }
  4. 選擇儲存。

測試您的耐用函數並檢視執行

在主控台程式碼編輯器的 TEST EVENTS 區段中,選擇測試事件旁邊的執行圖示:

在 Lambda 主控台程式碼編輯器中執行測試事件按鈕。

您的耐用函數會開始執行。因為它包含 10 秒的等待時間,初始調用會快速完成,而且函數會在等待期間之後繼續。您可以在持久性執行索引標籤中檢視執行進度。

檢視您的耐久函數執行
  1. 選擇持久性執行索引標籤。

  2. 在清單中尋找您的執行。執行會顯示目前狀態 (執行中、成功或失敗)。

  3. 選擇執行 ID 以檢視詳細資訊,包括:

    • 顯示每個步驟完成時間的執行時間表

    • 檢查點歷史記錄

    • 等待期間

    • 步驟結果

您也可以在 CloudWatch Logs 中檢視函數的日誌,以查看每個步驟的主控台輸出。

若要在 CloudWatch Logs 中檢視函數的調用記錄
  1. 開啟 CloudWatch 主控台的 日誌群組 頁面。

  2. 為函數 (/aws/lambda/myDurableFunction) 選擇日誌群組名稱。

  3. 向下捲動並選擇要查看的函數調用日誌串流。

    Lambda 函數的日誌串流清單。

    您應該會看到每次叫用函數的日誌項目,包括初始執行和等待後的重播。

注意

當您從 DurableContext(例如 context.logger或 stepContext.logger) 使用記錄器時,日誌也會出現在 Lambda 主控台的耐久執行和步驟檢視中。這些日誌可能需要一些時間才能載入。

清除

當您完成使用範例耐用函數時,請將其刪除。您還可以刪除存放函數日誌的日誌群組,以及主控台建立的執行角色。

若要刪除 Lambda 函數
  1. 開啟 Lambda 主控台中的 函數頁面。

  2. 選擇您建立的函數。

  3. 選擇 Actions (動作)、Delete (刪除)。

  4. 在文字輸入欄位中輸入 confirm,然後選擇刪除。

刪除日誌群組
  1. 開啟 CloudWatch 主控台的 日誌群組 頁面。

  2. 選取函數的日誌群組 (/aws/lambda/myDurableFunction)。

  3. 選擇 動作 、刪除日誌群組 。

  4. 在 刪除日誌群組 對話方塊中,選擇 刪除 。

刪除執行角色
  1. 開啟 AWS Identity and Access Management (IAM) 主控台的角色頁面。

  2. 選取函數的執行角色,(例如 myDurableFunction-role-31exxmpl)。

  3. 選擇 刪除。

  4. 在刪除角色對話方塊中輸入角色名稱,然後選擇刪除。

其他資源和後續步驟

現在您已使用 主控台建立並測試簡單的耐用函數,請採取下列後續步驟:

  • 了解耐用函數的常見使用案例,包括分散式交易、訂單處理和人工審核工作流程。請參閱範例。

  • 了解如何使用 CloudWatch 指標和執行歷史記錄監控持久的函數執行。請參閱監控和偵錯。

  • 了解如何同步和非同步叫用耐久函數,以及管理長時間執行的執行。請參閱叫用耐用函數。

  • 遵循撰寫確定性程式碼、管理檢查點大小和最佳化成本的最佳實務。請參閱最佳實務。

  • 了解如何在本機和雲端測試耐用的函數。請參閱測試耐用函數。

  • 比較耐用的函數與 Step Functions,以了解每個方法最有效的時機。請參閱耐用函數或 Step Functions。