在 Step Functions 驟函數中使用 Lambda 函數迭代循環 - AWS Step Functions

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

在 Step Functions 驟函數中使用 Lambda 函數迭代循環

在此教學課程中,您將實作設計模式,其會使用狀態機器和 AWS Lambda 函數反覆運算迴圈特定的次數。

每當您需要追蹤狀態機器中的迴圈次數時,請使用此設計模式。此實作可協助您中斷大型任務,或將長時間執行的執行分割成較小區塊,或在特定事件數量後結束執行。您可以使用類似的實作來定期結束並重新啟動長時間執行的執行,以避免超過 AWS Step Functions AWS Lambda、或其他服務的服 AWS 務配額。

在開始之前,請先閱讀建立使用 Lambda 的 Step Functions 狀態機教學課程,以確保您熟悉一起使用 Lambda 和 Step Functions。

步驟 1:創建一個 Lambda 函數以迭代計數

透過使用 Lambda 函數,您可以追蹤狀態機器中迴圈的迭代次數。下列 Lambda 函數會接收countindex、和的輸入值step。它會傳回包含更新 index 和名為 continue 布林值的這些值。如果小於,true則 Lambda 函數會index設定continuecount

您的狀態機器會實作 Choice 狀態,如果 continuetrue,其將執行一些應用程式邏輯,如果為 false 則結束。

建立 Lambda 函數

  1. 登入 Lambda 主控台,然後選擇 [建立函數]。

  2. Create function (建立函數) 頁面上,選擇 Author from scratch (從頭開始撰寫)

  3. 在「基本資訊」區段中,設定 Lambda 函數,如下所示:

    1. 針對 函數名稱 ,請輸入 Iterator

    2. 針對 Runtime (執行時間),選擇 Node.js

    3. 在 [變更預設執行角色] 中,選擇 [使用基本 Lambda 權限建立新角色]。

    4. 選擇建立函數

  4. 將 Lambda 函數的下列程式碼複製到程式碼來源中。

    export const handler = function (event, context, callback) { let index = event.iterator.index let step = event.iterator.step let count = event.iterator.count index = index + step callback(null, { index, step, count, continue: index < count }) }

    此程式碼接受輸入值為 countindexstep。這會將 step 的值增量 index,並傳回這些值及布林值 continue。如果 index 低於 count,則 continue 的值為 true

  5. 選擇部署

步驟 2:測試 Lambda 函數

使用數值執行 Lambda 函數,以便在運作中查看該函數。您可以為模擬迭代的 Lambda 函數提供輸入值。

若要測試您的 Lambda 函數

  1. 選擇 測試

  2. 在 [設定測試事件] 對話方塊TestIterator中,輸入 [事件名稱] 方塊。

  3. 將範例資料取代為以下內容。

    { "Comment": "Test my Iterator function", "iterator": { "count": 10, "index": 5, "step": 1 } }

    這些值會模擬反覆運算期間來自狀態機器的內容。Lambda 函數將遞增索引,並在索引小truecontinue時返回count。對於此測試,索引已經增加到 5。測試將遞增index6並設定continuetrue

  4. 選擇 Create (建立)。

  5. 選擇「測試」以測試您的 Lambda 函數。

    測試結果會顯示在 [執行結果] 索引標籤中。

  6. 選擇 [執行結果] 索引標籤以查看輸出。

    { "index": 6, "step": 1, "count": 10, "continue": true }
    注意

    如果您將設index定為9並再次測試10,則continueindex增量為和false

步驟 3:建立狀態機器

離開 Lambda 主控台之前...

複製 Lambda 函數ARN。將其粘貼到註釋中。下一個步驟將需要此值。

接下來,您將建立具有下列狀態的狀態機器:

  • ConfigureCount— 設定countindex和的預設值step

  • Iterator— 參照您之前建立的 Lambda 函數,並傳入中設定的值ConfigureCount

  • IsCountReached— 根據Iterator函數傳回的值,繼續迴圈或繼續Done狀態的選擇狀態。

  • ExampleWork— 需要完成工作的存根。在此範例中,工作流程具有Pass狀態,但在實際解決方案中,您可能會使用Task.

  • Done— 工作流程的結束狀態。

要在控制台中創建狀態機:

  1. 開啟 Step Functions 主控台,然後選擇 [建立狀態機器]。

    重要

    您的狀態機器必須與 Lambda 函數位於相同的 AWS 帳戶和區域。

  2. 選取「空白」範本。

  3. 在「程式碼」窗格中,貼上JSON定義狀態機器的下列項目。

    如需 Amazon 州語言的詳細資訊,請參閱狀態機器結構

    { "Comment": "Iterator State Machine Example", "StartAt": "ConfigureCount", "States": { "ConfigureCount": { "Type": "Pass", "Result": { "count": 10, "index": 0, "step": 1 }, "ResultPath": "$.iterator", "Next": "Iterator" }, "Iterator": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Iterate", "ResultPath": "$.iterator", "Next": "IsCountReached" }, "IsCountReached": { "Type": "Choice", "Choices": [ { "Variable": "$.iterator.continue", "BooleanEquals": true, "Next": "ExampleWork" } ], "Default": "Done" }, "ExampleWork": { "Comment": "Your application logic, to run a specific number of times", "Type": "Pass", "Result": { "success": true }, "ResultPath": "$.result", "Next": "Iterator" }, "Done": { "Type": "Pass", "End": true } } }
  4. Iterator Resource欄位取代ARN為您之前建立的 Iterator Lambda 函數。

  5. 選取「Config」,然後輸入狀態機的「名稱」,例如IterateCount

    注意

    狀態機器、執行項目和活動工作的名稱長度不得超過 80 個字元。這些名稱對於您的帳戶和 AWS 地區而言必須是唯一的,且不得包含以下任何一項:

    • 空白符號

    • 萬用字元 (? *)

    • 括號字元 (< > { } [ ])

    • 特殊字元 (" # % \ ^ | ~ ` $ & , ; : /)

    • 控制字符(\\u0000-\\u001f\\u007f-\\u009f)。

    Step Functions 接受包含非ASCII字元的狀態機器、執行項目、活動和標籤的名稱。由於ASCII包含非ASCII字元的名稱不適用於 Amazon CloudWatch,因此我們建議您僅使用字元,以便您可以追蹤中的指標。 CloudWatch

  6. 對於「類型」,接受預設值為「標準」。針對「權限」,選擇「建立新角色」。

  7. 選擇 [建立],然後選擇 [確認角色建立]。

步驟 4:開始新的執行

建立狀態機器後,您就可以開始執行。

  1. IterateCount頁面上,選擇 [開始執行]。

  2. (選擇性) 若要識別您的執行項目,您可以指定名稱,或使用預設產生的執行名稱。

    注意

    Step Functions 接受包含非ASCII字元的狀態機器、執行項目、活動和標籤的名稱。由於ASCII包含非ASCII字元的名稱不適用於 Amazon CloudWatch,因此我們建議您僅使用字元,以便您可以追蹤中的指標。 CloudWatch

  3. 選擇 Start Execution (開始執行)

    狀態機器的新執行隨即開始,顯示您正在執行的執行。

    狀態機圖顯示藍色迭代器狀態,指示正在進行中的狀態。

    執行會以步驟遞增,並使用 Lambda 函數追蹤計數。每次反覆運算時,其會執行在狀態機器中以 ExampleWork 狀態參考的範例工作。

    計數達到狀態機器中指定的 ConfigureCount 狀態的數量後,執行會結束反覆運算並退出。

    狀態機器圖以綠色顯示迭代器和完成狀態,以表示兩者都已成功。