在 Step Functions 中了解狀態機 - AWS Step Functions

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

在 Step Functions 中了解狀態機

Step Functions 是基於狀態機任務。在 Step Functions 中,狀態機器稱為工作流程,這是一系列事件驅動的步驟。工作流程中的每個步驟稱為狀態。例如,「任務」狀態表示另一個工作單位 AWS 服務執行,例如呼叫另一個 AWS 服務 或API。執行工作流程執行工作的執行個體稱為「Step Functions」中的行。

Step Functions 工作流程圖的說明性範例。

重要概念

以下提供前後關聯之「Step Functions」關鍵詞彙的概觀。

術語 描述
工作流程 一系列通常反映商務程序的步驟。
狀態

狀態機器中的個別步驟,這些步驟可以根據其輸入做出決策、從這些輸入執行動作,以及將輸出傳遞至其他狀態。

如需詳細資訊,請參閱探索要在 Step Functions 中使用的工作流程狀態

流程工作室

視覺化工作流程設計工具,可協助您更快地建立工作流程原型並建

如需詳細資訊,請參閱在 Step Functions Workflow Studio 中開發工作流程

狀態機器

使用代表工作流程中個別狀態或步驟的JSON文字以及欄位 (例如StartAtTimeoutSeconds、和) 來定義的工作流程Version

如需詳細資訊,請參閱Step Functions 工作流程的 Amazon 狀態機器結構語言

Amazon States Language

用JSON於定義狀態機器的基礎結構化語言。使用ASL,您可以定義可以執行工作 (Task狀態) 的狀態集合、決定要轉換到下一個 (Choicestate) 的狀態,以及停止執行時發生錯誤 (Fail狀態)。

如需詳細資訊,請參閱使用 Amazon 州語言定義 Step Functions 工作流程

輸入和輸出配置

工作流程中的狀態會接收JSON資料做為輸入,通常會將JSON資料作為輸出傳遞至下一個狀態。Step Functions 提供篩選器來控制狀態之間的資料流程。

如需詳細資訊,請參閱在 Step Functions 中處理輸入和輸出

服務整合

你可以打電話 AWS 工API作流程中的服務動作。

如需詳細資訊,請參閱整合服務與 Step Functions

服務整合類型
  • AWS SDK集成 -調用 200 多個中的任何一個的標準方式 AWS 服務 並直接從您的狀態機進API行超過九千個操作。

  • 優化集成 — 可簡化通話和與某些服務交換數據的自定義集成。例如,Lambda 叫用會自動將回應Payload欄位從逸出JSON字串轉換為JSON物件。

服務整合模式

調用時 AWS 服務,您可以使用下列其中一種服務整合模式:

執行

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

如需詳細資訊,請參閱在 Step Functions 中啟動狀態機器執行

狀態機器資料

狀態機器資料的格式如下:

  • 狀態機器的初始輸入

  • 狀態之間傳遞的資料

  • 來自狀態機器的輸出

本節說明如何格式化和使用狀態機資料 AWS Step Functions.

資料格式

狀態機數據由JSON文本表示。您可以使用支援的任何資料類型將值提供給狀態機器JSON。

注意
  • JSON文字格式的數字符合 JavaScript 語意。這些數字通常對應於雙精度 IEEE-854 值。

  • 以下是有效的JSON文字:

    • 獨立的引號分隔字串

    • 物件

    • 陣列

    • 數字

    • 布尔值

    • null

  • 狀態的輸出成為下一個狀態的輸入。但是,您可以使用「輸入和輸出處理」來限制狀態處理輸入資料的子集。

狀態機器輸入/輸出

您可以將初始輸入數據提供給 AWS Step Functions 狀態機以兩種方式之一。您可以在開始執StartExecution行時將資料傳遞至動作。您也可以從 Step Functions 主控台將資料傳遞至狀態機器。初始資料會傳送至狀態機器的 StartAt 狀態。如果沒有提供輸入,預設會是空的物件 ({})。

執行的輸出會由最後狀態 (terminal) 傳回。此輸出會在執行結果中顯示為JSON文字。

對於標準工DescribeExecution作流程,您可以使用外部呼叫者 (例如動作) 從執行歷程記錄擷取執行結果。您可以在「Step Functions」主控台上檢視執行結果。

對於 Express 工作流程,如果您啟用記錄功能,則可以從記 CloudWatch 錄擷取結果,或在 Step Functions 主控台中檢視和偵錯執行。如需詳細資訊,請參閱 使用 CloudWatch 日誌記錄 Step Functions 中的執行歷史記錄在 Step Functions 主控台中檢視執行詳細資訊

您還應該考慮與狀態機相關的配額。如需詳細資訊,請參閱 Step Functions 服務配額

狀態輸入/輸出

每個狀態的輸入都包含來自前述狀態的JSON文本,或者對於StartAt狀態,輸入到執行中。某些流程控制狀態會將他們的輸入重複到他們的輸出中。

在以下範例中,狀態機器會同時新增兩個數字。

  1. 定義 AWS Lambda 功能。

    function Add(input) { var numbers = JSON.parse(input).numbers; var total = numbers.reduce( function(previousValue, currentValue, index, array) { return previousValue + currentValue; }); return JSON.stringify({ result: total }); }
  2. 定義 狀態機器。

    { "Comment": "An example that adds two numbers together.", "StartAt": "Add", "Version": "1.0", "TimeoutSeconds": 10, "States": { "Add": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Add", "End": true } } }
  3. 用下面的JSON文本開始執行。

    { "numbers": [3, 4] }

    Add態會接收文JSON字,並將其傳遞給 Lambda 函數。

    Lambda 函數將計算結果返回到狀態。

    狀態會在它的輸出中傳回以下值。

    { "result": 7 }

    由於 Add 也是狀態機器中的最終狀態,此值會做為狀態機器的輸出傳回。

    如果最終狀態沒有傳回輸出,則狀態機器會傳回空的物件 ({})。

如需詳細資訊,請參閱在 Step Functions 中處理輸入和輸出

調用 AWS Step Functions 從其他服務

您可以設定數個其他服務來叫用狀態機器。根據狀態機的工作流程類型,您可以非同步或同步呼叫狀態機器。若要同步呼叫狀態機器,請使用呼StartSyncExecutionAPI叫或 Amazon API 閘道與 Express 工作流程整合。透過非同步叫用,Step Functions 會暫停工作流程執行,直到傳回工作 Token 為止。但是,等待任務 Token 確實會使工作流程同步。

您可以設定為叫用 Step Functions 的服務包括:

Step Functions 調用由配額控制。StartExecution如需詳細資訊,請參閱:

狀態機中的轉換

當您開始新的狀態機執行時,系統會從頂層StartAt欄位中參照的狀態開始。此欄位 (以字串形式指定) 必須完全相符 (包括大小寫) 在工作流程中的狀態名稱。

狀態運行後, AWS Step Functions 使用Next欄位的值來決定下一個要前進的狀態。

Next欄位也會將狀態名稱指定為字串。此字串區分大小寫,且必須與狀態機器描述中指定的狀態名稱完全相符

例如,以下狀態包含對 NextState 的移轉。

"SomeState" : { ..., "Next" : "NextState" }

大多數狀態只允許具有Next欄位的單一轉移規則。但是,某些流量控制狀態 (例如Choice狀態) 可讓您指定多個轉移規則,每個規則都有自己Next的欄位。Amazon 狀態語言提供每個您可以指定之狀態類型的詳細資訊,包括有關如何指定轉換的資訊。

狀態可以具有來自其他狀態的多個傳入轉換。

程序會重複執行,直到達終端機狀態 (具有、或的狀態"End": true) "Type": Succeed"Type": Fail,或發生執行階段錯誤為止。

當您 redrive一個執行,它被認為是一個狀態轉換。此外,在 a 中重新運行的所有狀態 redrive 也被視為狀態轉換。

下列規則適用於狀態機器內的狀態:

  • 狀態可以在封閉區塊內以任何順序出現。但是,它們的列出順序不會影響它們的運行順序。該順序取決於狀態的內容。

  • 在狀態機內,只能有一個狀態指定為狀start態。狀start態由頂層結構中StartAt欄位的值定義。

  • 根據您的狀態機器邏輯(例如,如果狀態機具有多個邏輯分支),您可能會有多個end狀態。

  • 如果您的狀態機只包含一種狀態,則它可以是開始和結束狀態。

分散式貼圖狀態下的轉移

當您在分散式模式中使用Map狀態時,會針對分散式地圖狀態啟動的每個子工作流程執行向您收取一次狀態轉換費用。當您在內嵌模式中使用Map狀態時,不會針對內嵌對應狀態的每次迭代向您收取狀態轉換費用。

您可以使用「分散式」模式中的Map狀態來最佳化成本,並在Map狀態定義中包含巢狀工作流程。當您啟動 Express 類型的子工作流程執行時,「分散式對應」狀態也會增加更多值。Step Functions 數會儲存 Express 子工作流程執行的回應和狀態,以減少在 CloudWatch 記錄中儲存執行資料的需求。您也可以存取「分散式對應」狀態下可用的流程控制項,例如定義錯誤閾值或批次處理項目群組。如需 Step Functions 定價的相關資訊,請參閱 AWS Step Functions 定價

讀取 Step Functions 中的一致性

狀態機更新 AWS Step Functions 最終是一致的。幾秒鐘內的所有StartExecution呼叫都將使用更新的定義和 roleArn (IAM角色的 Amazon 資源名稱)。如果在呼叫 UpdateStateMachine 後立即開始執行,則可能會使用先前的狀態機器定義和 roleArn

如需詳細資訊,請參閱下列內容: