本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Step Functions 工作流程的 Amazon States 語言狀態機器結構
管理狀態和轉換資料
Step Functions 最近新增了變數,並JSONata管理狀態和轉換資料。
了解如何使用變數傳遞資料,以及使用 轉換資料JSONata。
狀態機器使用文字定義,該JSON文字代表包含下列欄位的結構。
-
Comment
(選用) -
狀態機器的人類可讀描述。
-
QueryLanguage
(選用;省略時,預設為JSONPath
) -
-
狀態機器使用的查詢語言名稱。允許的值為
JSONPath
和JSONata
。 -
如果未提供狀態機器,則每個狀態的預設值為 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
)-
-
狀態使用的查詢語言名稱。允許的值為
JSONPath
和JSONata
。 -
當最上層狀態機器查詢語言為 時
JSONPath
,個別狀態可以透過將 QueryLanguage 設定為 來覆寫查詢語言JSONata
。有鑑於此方法,您可以逐步將狀態機器從 轉換為一次JSONPathJSONata一個狀態。
-
-
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僅限 ) -
選取要傳遞至下一個狀態之狀態輸出的一部分的路徑。如果省略,則其具有
$
指定整個輸出的值。如需詳細資訊,請參閱輸入和輸出處理。