在工作流程工作室中設計狀態機 - AWS Step Functions

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

在工作流程工作室中設計狀態機

在本教程中,您將學習使用工作流 Studio 的基礎知識 AWS Step Functions。 在工設計模式作流程 Studio 中,您將創建一個包含多個狀態的狀態機器 PassChoice,包括FailWait,,和Parallel。您將使用拖放功能來搜尋、選取和設定這些狀態。然後,您將檢視工作流程的自動產生 Amazon States Language (ASL) 定義。您還將使用程式碼模式的工作流 Studio 來編輯工作流定義。然後,您將結束工作流程 Studio,執行狀態機器,並檢閱執行詳細資料。

在本教程中,您還將學習如何更新狀態機器並查看執行輸出中的更改。最後,您將執行清理步驟並刪除狀態機器。

完成這個教學課程之後,您就會知道如何使用 Workflow Studio 來建立和設定使用 [設計] 和 [程式] 模式的工作流程。您還將知道如何更新,運行和刪除狀態機器。

步驟 1:瀏覽至工作流程工作室

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

  2. 在「選擇範本」對話方塊中,選取「空白」。

  3. 選擇選以在中開啟工作流程工作室設計模式

步驟 2:建立狀態機

在工作流程 Studio 中,狀態機器是工作流程的圖形表示。使用工作流程 Studio,您可以定義、設定和檢查工作流程的個別步驟。在下面的步驟中,您可以使用設計模式的工作流 Studio 來創建您的狀態機。

建立 狀態機器
  1. 請確定您處於 [工作流程工作室] 的 [設計] 模式。

  2. 從左狀態瀏覽器側選擇「流量」頁標。然後,將「通過」狀態拖曳至標示為「拖曳第一個狀態」的空白狀態

  3. 將「選擇」狀態從「流程」標籤拖放到「通過」狀態下方。

  4. 對於「狀態」名稱,請取代「選擇」的預設名稱。在本教學課程中,使用名稱 IsHelloWorldExample

  5. 拖曳另一個「通過」狀態並將其放到IsHelloWorldExample狀態的一個分支。然後,將「失敗」狀態拖放到狀IsHelloWorldExample態的其他分支下方。

  6. 選擇「通過 (1)」狀態,並將其重新命名為Yes。將「失敗」狀態重新命名為No

  7. 使用布林變數IsHelloWorldExample指定IsHelloWorldExample狀態的分支邏輯。

    如果IsHelloWorldExampleFalse,則工作流程將進入「」狀態。否則,工作流程會繼續處於 「是」 狀態的執行流程。

    若要定義分支邏輯,請執行下列操作:

    1. 在上選擇IsHelloWorldExample狀態畫布和工作流程圖,然後在「選擇規則」下,選擇「規則 #1」方塊中的編輯圖示,以定義第一個選擇規則。

    2. 選擇新增條件

    3. 在「規則 #1 的條件」對話方塊中,於變數$.IsHelloWorldExample 下輸入。

    4. 選擇等於下運算符

    5. 選擇布爾常量,然後從下拉列表中選擇 true

    6. 選擇 [儲存條件]。

    7. 確保然後下一個狀態是:下拉列表已選擇

    8. 選擇「新增選擇規則」,然後選擇「新增條件」。

    9. 在「規則 #2」方塊中,透過重複子步驟 7.c 到 7.f 來定義IsHelloWorldExample變數值為 false 時的第二個選擇規則。對於步驟 7.e,請選擇而不是

    10. 在裡面規則 #2 框中,選擇來自然後下一個狀態是:下拉列表。

    11. 在 [預設規則] 方塊中,選擇編輯圖示以定義預設選擇規則,然後從下拉式清單中選擇 []。

  8. [是] 狀態之後新增 [等待] 狀態,並將其命名Wait 3 sec。然後,通過執行以下步驟將等待時間配置為三秒鐘:

    1. 在 [選項] 下,保留 [等待固定間隔] 的預設選取項目。

    2. 在 [] 下,確定已選取 [輸入秒數],然後3在方塊中輸入。

  9. 在「等待 3 秒」狀態之後,新增「平行」狀態。在其兩個分支中添加兩個「通過」狀態。命名第一個「通過」狀態Hello。命名第二個「通過」狀態World

    完成的工作流程看起來應如下圖所示:

    IsHelloWorldExample 狀態機工作流程的屏幕截圖。

步驟 3:檢閱自動產生的 Amazon 州語言定義

當您將狀態從「程」索引標籤拖放到畫布上時,工作流程 Studio 會自動即時編寫工作流程的 Amazon 狀態語言 (ASL) 定義。在面Inspector 面板板中,選擇「定」切換按鈕以檢視此定義,或視需要切換程式碼模式至編輯此定義。若要取得有關編輯工作流程定義的資訊,請參閱本自學課程的步驟 4

  • (選擇性) 在「Inspector 查程式」面板上選擇「定義」,然後檢視狀態機的工作流程。

    下列範例程式碼顯示IsHelloWorldExample狀態機器自動產生的 Amazon 狀態語言定義。您在工作流程 Studio 中新增的Choice狀態會根據您在步驟 2 中定義的分支邏輯來決定執行流程。

    { "Comment": "A Hello World example of the Amazon States Language using Pass states", "StartAt": "Pass", "States": { "Pass": { "Type": "Pass", "Next": "IsHelloWorldExample", "Comment": "A Pass state passes its input to its output, without performing work. Pass states are useful when constructing and debugging state machines." }, "IsHelloWorldExample": { "Type": "Choice", "Comment": "A Choice state adds branching logic to a state machine. Choice rules can implement 16 different comparison operators, and can be combined using And, Or, and Not\"", "Choices": [ { "Variable": "$.IsHelloWorldExample", "BooleanEquals": false, "Next": "No" }, { "Variable": "$.IsHelloWorldExample", "BooleanEquals": true, "Next": "Yes" } ], "Default": "Yes" }, "No": { "Type": "Fail", "Cause": "Not Hello World" }, "Yes": { "Type": "Pass", "Next": "Wait 3 sec" }, "Wait 3 sec": { "Type": "Wait", "Seconds": 3, "Next": "Parallel" }, "Parallel": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "Hello", "States": { "Hello": { "Type": "Pass", "End": true } } }, { "StartAt": "World", "States": { "World": { "Type": "Pass", "End": true } } } ] } } }

步驟 4:在「程式碼」模式中編輯工作流程定義

Workflow Studio 的程式模式提供整合的程式碼編輯器,可檢視和編輯工作流程的ASL定義。

  1. 選擇「程式碼」以切換至「程式碼」模式。

  2. 在「行」狀態定義之後,放置游標並按下Enter

  3. 按下Ctrl+space以查看您可以在「平行」狀態之後新增的狀態清單。

  4. 從選項清單中選擇「通過狀態」。程式碼編輯器會新增「通過狀態」的樣板程式碼。

  5. 新增此狀態會導致工作流程定義中發生錯誤。在「行」狀態的定義中,取代"End": true"Next": "PassState"

  6. 在您新增的「通過狀態」定義中,進行下列變更:

    1. 移除「結果」節點。

    2. 移除"ResultPath": "$.result","Next": "NextState"

    3. 之後"Type": "Pass",,輸入"End": true

    4. ,在「通過狀態」定義之後新增 a。

您的工作流程定義現在看起來應該類似於下列定義。

{ "Comment": "A description of my state machine", "StartAt": "Pass", "States": { "Pass": { "Type": "Pass", "Next": "IsHelloWorldExample" }, "IsHelloWorldExample": { "Type": "Choice", "Choices": [ { "Variable": "$.IsHelloWorldExample", "BooleanEquals": true, "Next": "Yes" }, { "Variable": "$.IsHelloWorldExample", "BooleanEquals": false, "Next": "No" } ], "Default": "Yes" }, "Yes": { "Type": "Pass", "Next": "Wait 3 seconds" }, "Wait 3 seconds": { "Type": "Wait", "Seconds": 3, "Next": "Parallel" }, "Parallel": { "Type": "Parallel", "Branches": [ { "StartAt": "Hello", "States": { "Hello": { "Type": "Pass", "End": true } } }, { "StartAt": "World", "States": { "World": { "Type": "Pass", "End": true } } } ], "Next": "PassState" }, "PassState": { "Type": "Pass", "End": true }, "No": { "Type": "Fail" } } }

步驟 5:保存狀態機

  1. 選擇其他 Con fig 態或選擇的預設狀態機器名稱旁邊的編輯圖示MyStateMachine。在狀態機器組態中,指定名稱。例如,​輸入 HelloWorld

  2. (選擇性) 指定其他工作流程設定,例如狀態機器類型及其執行角色。在本教學課程中,請保留狀態機器組態中的所有預設選項。

  3. 選擇 Create (建立)。

  4. 在 [確認角色建立] 對話方塊中,選擇 [確認] 以繼續。

    您也可以選擇 [檢視角色組態] 回到 [設定] 模式。

如需有關 Config 模式的詳細資訊,請參閱工作流程 Studio 的 Config 模式

步驟 6:運行狀態機

狀態機器執行是執行工作流程以執行工作的執行個體。

  1. 在 [狀態機器] 頁面上,選擇HelloWorld狀態機器。

  2. HelloWorld頁面上,選擇 [開始執行]。

  3. (選擇性) 輸入自訂執行名稱,以覆寫產生的預設值。

    非ASCII名稱和記錄

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

  4. 在「入」方塊中,以JSON格式輸入執行的輸入值。根據您的輸入,IsHelloWorldExample變數決定要執行的狀態機器流程。現在,請使用以下輸入值:

    { "IsHelloWorldExample": true }
    注意

    雖然指定執行輸入是選擇性的,但在本教學課程中,必須指定類似於上述範例輸入的執行輸入。執行狀態機器時,會在Choice狀態中參照此輸入值。

  5. 選擇 Start execution (開始執行)

  6. Step Functions 主控台會將您導向至標題為執行 ID 的頁面。此頁面稱為「執行詳細資訊」頁面。在此頁面上,您可以在執行進行時或完成之後複查執行結果。

    若要複查執行結果,請在「圖形」檢視中選擇個別狀態,然後選擇步驟詳情窗格上的個別索引標籤,分別檢視每個狀態的詳細資訊,包括輸入、輸出和定義。如需有關可在「執行詳細資訊」頁面檢視之執行資訊的詳細資訊,請參閱執行細節概述

    在本自學課程中,如果您輸入的輸入值為"IsHelloWorldExample": true,您應該會看到下列輸出:

    { "IsHelloWorldExample": true }, { "IsHelloWorldExample": true }

步驟 7:更新狀態機

當您更新狀態機時,您的更新最終保持一致。在短暫的時間之後,所有新啟動的執行都將反映狀態機的更新定義。所有當前正在運行的執行都將在先前的定義下運行到完成。

在此步驟中,您將在工作流程 Studio 的設計模式模式下更新狀態機器。您將在「通行證」狀態中新增一個名為「世界」的Result欄位。

  1. 在標題為您的執行 ID 的頁面上,選擇編輯狀態機器

  2. 請確定您處於 [設] 模式。

  3. 在畫布上選擇名為「世界」的「通過」狀態,然後選擇「輸出」。

  4. 在「結果」方塊中,輸入"World has been updated!"

  5. 選擇 Save (儲存)。

  6. (選擇性) 在「定」區域中,檢視工作流程的更新後 Amazon States 語言定義。

    { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "Hello", "States": { "Hello": { "Type": "Pass", "End": true } } }, { "StartAt": "World", "States": { "World": { "Type": "Pass", "Result": "World has been updated!", "End": true } } } ], "Next": "PassState" }
  7. 選擇 Execute (執行)

  8. 在新索引標籤中開啟的 [開始執行] 對話方塊中,提供下列執行輸入。

    { "IsHelloWorldExample": true }
  9. 選擇 Start Execution (開始執行)

  10. (選擇性) 在「圖表」檢視中,選擇「世」步驟,然後選擇「輸出」。輸出是世界已經更新!

步驟 8:清除

若要刪除您的狀態機
  1. 從導覽功能表中,選擇 [狀態機]。

  2. 在 [狀態電腦] 頁面上,選取 HelloWorld,然後選擇 [刪除]。

  3. 在 [刪除狀態機器] 對話方塊中,輸入delete以確認刪除。

  4. 選擇 刪除

    如果刪除成功,畫面頂端會出現綠色的狀態列。綠色狀態列會告訴您狀態機已標記為要刪除。當所有進行中的執行停止運行時,您的狀態機將被刪除。

若要刪除您的執行角色
  1. 開啟的 [角色] 頁面IAM。

  2. 選擇為您建立的「Step Functions」IAM 角色。例如,StepFunctions-HelloWorld-角色-EXAMPLE

  3. 選擇 Delete role (刪除角色)。

  4. 選擇 Yes, delete (是,刪除)。