建立 Lambda 耐用函數 - AWS Lambda

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

建立 Lambda 耐用函數

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

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

為了簡化,您可以使用 Python 或 Node.js 執行期建立函數。您可以使用這些轉譯語言,直接在主控台的內建程式碼編輯器中編輯函數程式碼。

提示

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

先決條件

如果您沒有 AWS 帳戶,請完成下列步驟來建立一個。

註冊 AWS 帳戶
  1. 開啟 https://portal.aws.amazon.com/billing/signup

  2. 請遵循線上指示進行。

    部分註冊程序需接收來電或簡訊,並在電話鍵盤輸入驗證碼。

    當您註冊 時 AWS 帳戶,AWS 帳戶根使用者會建立 。根使用者有權存取該帳戶中的所有 AWS 服務 和資源。作為安全最佳實務,請將管理存取權指派給使用者,並且僅使用根使用者來執行需要根使用者存取權的任務

AWS 會在註冊程序完成後傳送確認電子郵件給您。您可以隨時登錄 https://aws.amazon.com/ 並選擇我的帳戶,以檢視您目前的帳戶活動並管理帳戶。

註冊 後 AWS 帳戶,請保護 AWS 帳戶根使用者、啟用 AWS IAM Identity Center和建立管理使用者,以免將根使用者用於日常任務。

保護您的 AWS 帳戶根使用者
  1. 選擇根使用者並輸入 AWS 帳戶 您的電子郵件地址,以帳戶擁有者AWS 管理主控台身分登入 。在下一頁中,輸入您的密碼。

    如需使用根使用者登入的說明,請參閱 AWS 登入 使用者指南中的以根使用者身分登入

  2. 若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。

    如需說明,請參閱《IAM 使用者指南》中的為您的 AWS 帳戶 根使用者 (主控台) 啟用虛擬 MFA 裝置

建立具有管理存取權的使用者
  1. 啟用 IAM Identity Center。

    如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的啟用 AWS IAM Identity Center

  2. 在 IAM Identity Center 中,將管理存取權授予使用者。

    如需使用 IAM Identity Center 目錄 做為身分來源的教學課程,請參閱AWS IAM Identity Center 《 使用者指南》中的使用預設值設定使用者存取權 IAM Identity Center 目錄

以具有管理存取權的使用者身分登入
  • 若要使用您的 IAM Identity Center 使用者簽署,請使用建立 IAM Identity Center 使用者時傳送至您電子郵件地址的簽署 URL。

    如需使用 IAM Identity Center 使用者登入的說明,請參閱AWS 登入 《 使用者指南》中的登入 AWS 存取入口網站

指派存取權給其他使用者
  1. 在 IAM Identity Center 中,建立一個許可集來遵循套用最低權限的最佳實務。

    如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的建立許可集

  2. 將使用者指派至群組,然後對該群組指派單一登入存取權。

    如需指示,請參閱《AWS IAM Identity Center 使用者指南》中的新增群組

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

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

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

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

  2. 選擇建立函數

  3. 選取從頭開始撰寫

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

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

  6. 選取啟用持久性執行

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

注意

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

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

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

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

    顯示主控台程式碼編輯器和檔案總管中 index.mjs 檔案的圖
  2. 將以下程式碼貼到 index.mjs 標籤中,替換 Lambda 建立的程式碼。

    import { DurableContext, 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。所有耐用的操作都是同步方法呼叫。

使用主控台程式碼編輯器叫用耐用函數

耐用的函數需要合格的 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 函數的日誌串流清單。

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

清除

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

若要刪除 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 指標和執行歷史記錄監控持久的函數執行。請參閱監控和偵錯

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

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

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