View a markdown version of this page

Step Functions 工作流程的 Amazon States Language 狀態機器結構 - AWS Step Functions

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

Step Functions 工作流程的 Amazon States Language 狀態機器結構

狀態機器是使用 JSON 文字來定義的,而該 JSON 文字代表包含下列欄位的結構。

Comment (選用)

狀態機器的人類可讀描述。

QueryLanguage (選用;省略 時,預設為 JSONPath)
  • 狀態機器使用的查詢語言名稱。允許的值為 JSONPath 和 JSONata。

  • 如果未提供狀態機器,則每個狀態的預設值為 JSONPath。

  • 當最上層狀態機器查詢語言為 時JSONPath,個別狀態可以透過將 QueryLanguage 設定為 來覆寫查詢語言JSONata。有鑑於此方法,您可以逐步將狀態機器從 JSONPath 轉換為 JSONata,一次一個狀態。

  • 注意:您無法將頂層 JSONata 型狀態機器還原為 JSONata 和 JSONPath 狀態的混合。

StartAt (必要)

一個字串,該字串必須完全符合其中一個狀態物件的名稱 (區分大小寫)。

TimeoutSeconds (選用)

狀態機器可以執行的執行秒數上限。如果執行超過指定的時間,執行會失敗,出現States.Timeout 錯誤名稱。

Version (選用)

狀態機器中使用的 Amazon States Language 版本 (預設為 "1.0")。

States (必要)

一個物件,其中包含以逗號分隔的一組狀態。

States 欄位包含狀態。

{ "State1" : { }, "State2" : { }, ... }

狀態機器是由其包含的狀態和其間的關係所定義。

以下是範例。

{ "Comment": "A Hello World example of the Amazon States Language using a Pass state", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Pass", "Result": "Hello World!", "End": true } } }

啟動此狀態執行時,系統會從 StartAt 欄位 ("HelloWorld") 中參考的狀態著手。如果此狀態具有 "End": true 欄位,則執行停止並傳回結果。否則,系統會尋找 "Next": 欄位並繼續以該狀態執行。此程序會重複執行,直到系統達到結束狀態 (具有 "Type": "Succeed"、"Type": "Fail" 或 "End": true 的狀態),或發生執行時間錯誤為止。

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

  • 封閉區塊內的狀態可以任何順序發生,但是其列出的順序不會影響其執行順序。此順序是由狀態本身的內容所決定。

  • 在狀態機器內,只能有一個狀態指定為 start 狀態,而該狀態是由最上層結構中 StartAt 欄位的值所指定。此狀態是開始執行時最先執行的狀態。

  • End 欄位為 true 的任何狀態都會被視為 end (或 terminal) 狀態。根據您的狀態機器邏輯,例如,如果您的狀態機器有多個執行分支,您可能有一個以上的end狀態。

  • 如果狀態機器只包含一個狀態,該狀態可能同時是 start 狀態和 end 狀態。

工作流程中的常見狀態欄位

下列欄位適用於所有狀態元素。

Type (必要)

狀態的類型:任務、選擇、平行、映射、通過、等待、成功、失敗。

QueryLanguage (選用;省略 時,預設為 JSONPath)
  • 狀態使用的查詢語言名稱。允許的值為 JSONPath 和 JSONata。

  • 當最上層狀態機器查詢語言為 時JSONPath,個別狀態可以透過將 QueryLanguage 設定為 來覆寫查詢語言JSONata。有鑑於此方法,您可以逐步將狀態機器從 JSONPath 轉換為 JSONata,一次一個狀態。

Next

下一個狀態的名稱將會在目前狀態完成時執行。有些狀態類型 (例如 Choice) 允許使用多個轉移狀態。

如果目前狀態是工作流程中的最後一個狀態,或終端狀態,例如 工作流程狀態成功或 失敗的工作流程狀態,則您不需要指定 Next 欄位。

End

如果設定為 true,請將此狀態指定為結束狀態 (結束執行)。每個狀態機器可以有任意數量的結束狀態。只有其中一個 Next 或 End 可使用於狀態中。有些狀態類型,例如 Choice或終端狀態,例如 工作流程狀態成功和 失敗的工作流程狀態,不支援或使用 End 欄位。

Comment (選用)

保留人類可讀的狀態描述。

Assign (選用)

用來存放變數。Assign 欄位接受 JSON 物件,其中包含定義變數名稱及其指派值的鍵/值對。任何字串值,包括物件或陣列內的值,都會在以{% %}字元包圍時評估為 JSONata

如需詳細資訊,請參閱使用變數在狀態之間傳遞資料。

Output (選用,僅限 JSONata)

用來指定和轉換 狀態的輸出。指定時,值會覆寫狀態輸出預設值。

輸出欄位接受任何 JSON 值 (物件、陣列、字串、數字、布林值、 null)。任何字串值,包括物件或陣列內的值,如果被 {% %} 字元包圍,將評估為 JSONata。

輸出也直接接受 JSONata 表達式,例如:「輸出」:「{% jsonata 表達式 %}」

如需詳細資訊,請參閱輸入和輸出處理。

InputPath (選用,僅限 JSONPath)

一個路徑,可供選取一部分的狀態輸入以傳遞至狀態的任務進行處理。如果省略,它具有可指定整個輸入的 $ 值。如需詳細資訊,請參閱輸入和輸出處理。

OutputPath (選用,僅限 JSONPath)

選取要傳遞至下一個狀態之狀態輸出的一部分的路徑。如果省略,則其具有$指定整個輸出的值。如需詳細資訊,請參閱輸入和輸出處理。