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

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

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

管理狀態和轉換資料

Step Functions 最近新增了變數,並JSONata管理狀態和轉換資料。

了解如何使用變數傳遞資料,以及使用 轉換資料JSONata

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

Comment (選用)

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

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

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

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

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

StartAt (必要)

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

TimeoutSeconds (選用)

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

Version (選用)

狀態機器中使用的 Amazon States 語言版本 (預設為「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)
  • 狀態使用的查詢語言名稱。允許的值為 JSONPathJSONata

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

Next

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

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

End

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

Comment (選用)

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

Assign (選用)

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

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

Output (選用,JSONata僅限 )

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

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

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

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

InputPath (選用,JSONPath僅限 )

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

OutputPath (選用,JSONPath僅限 )

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