本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
選擇工作流程狀態
管理狀態和轉換資料
Step Functions 最近新增了變數,並JSONata管理狀態和轉換資料。
了解如何使用變數傳遞資料,以及使用 轉換資料JSONata。
Choice
狀態 ("Type": "Choice"
) 會將條件式邏輯新增至狀態機器。
除了大多數常見的狀態欄位, Choice
狀態還包含下列其他欄位。
Choices
(必要)-
選擇規則陣列,該陣列可決定狀態機器接下來會轉換到哪個狀態。
Choice
狀態執行時,它會評估每個選擇規則為 true 或 false。根據此評估的結果,Step Functions 會轉換到工作流程中的下一個狀態。您必須至少定義一個
Choice
狀態的規則。 Default
(選用、建議)-
如果未採用
Choices
中的任何轉換,則為狀態轉換至的名稱。
重要
Choice
狀態不支援 End
欄位。此外,這類狀態只會在其 Choices
欄位內使用 Next
。
選擇規則 (JSONata)
Choice
狀態必須有一個Choices
欄位,其值為選擇規則的非空白陣列,其中在使用 時包含下列欄位JSONata:
-
Condition
field – 評估為 true/false 的JSONata表達式。 -
Next
欄位 – 必須符合狀態機器中狀態名稱的值。
以下範例會檢查數值是否等於 1
。
{
"Condition": "{% $foo = 1 %}",
"Next": "NumericMatchState"
}
下列範例會檢查type
變數是否等於 local
。
{
"Condition": "{% $type = 'local' %}",
"Next": "StringMatchState"
}
以下範例會檢查字串是否大於 MyStringABC
。
{
"Condition": "{% $foo > 'MyStringABC' %}",
"Next": "StringGreaterMatchState"
}
下列範例會檢查字串是否不是 null。
{
"Condition" : "{% $possiblyNullValue != null and $possiblyNullValue = 42 %}",
"Next": "NotNullAnd42"
}
選擇規則 (JSONPath)
Choice
狀態必須有一個Choices
欄位,其值是選擇規則的非空白陣列,在使用 時包含下列欄位JSONPath:
-
比較 – 指定要比較的輸入變數的兩個欄位、比較類型,以及要比較變數的值。選擇規則支援兩個變數之間的比較。在選擇規則中,變數的值可以附加
Path
到支援的比較運算子名稱,以與狀態輸入的另一個值進行比較。比較中Variable
和 路徑欄位的值必須是有效的參考路徑。 -
Next
欄位 – 此欄位的值必須符合狀態機器中的狀態名稱。
以下範例會檢查數值是否等於 1
。
{
"Variable": "$.foo",
"NumericEquals": 1,
"Next": "FirstMatchState"
}
以下範例會檢查字串是否等於 MyString
。
{
"Variable": "$.foo",
"StringEquals": "MyString",
"Next": "FirstMatchState"
}
以下範例會檢查字串是否大於 MyStringABC
。
{
"Variable": "$.foo",
"StringGreaterThan": "MyStringABC",
"Next": "FirstMatchState"
}
下列範例會檢查字串是否為 null。
{
"Variable": "$.possiblyNullValue",
"IsNull": true
}
下列範例顯示 StringEquals 規則只有在$.keyThatMightNotExist
存在時,才會因為上述IsPresent
選擇規則而進行評估。
"And": [
{
"Variable": "$.keyThatMightNotExist",
"IsPresent": true
},
{
"Variable": "$.keyThatMightNotExist",
"StringEquals": "foo"
}
]
下列範例會檢查具有萬用字元的模式是否相符。
{ "Variable": "$.foo", "StringMatches": "log-*.txt" }
以下範例會檢查時間戳記是否等於 2001-01-01T12:00:00Z
。
{
"Variable": "$.foo",
"TimestampEquals": "2001-01-01T12:00:00Z",
"Next": "FirstMatchState"
}
下列範例會比較變數與狀態輸入中的另一個值。
{ "Variable": "$.foo", "StringEqualsPath": "$.bar" }
Step Functions 會依Choices
欄位中列出的順序檢查每個選擇規則。然後轉換為第一個「選擇規則」的 Next
欄位中指定的狀態,在該規則中變數會根據比較運算子來比對值。
支援下列比較運算子:
-
And
-
BooleanEquals
,BooleanEqualsPath
-
IsBoolean
-
IsNull
-
IsNumeric
-
IsPresent
-
IsString
-
IsTimestamp
-
Not
-
NumericEquals
,NumericEqualsPath
-
NumericGreaterThan
,NumericGreaterThanPath
-
NumericGreaterThanEquals
,NumericGreaterThanEqualsPath
-
NumericLessThan
,NumericLessThanPath
-
NumericLessThanEquals
,NumericLessThanEqualsPath
-
Or
-
StringEquals
,StringEqualsPath
-
StringGreaterThan
,StringGreaterThanPath
-
StringGreaterThanEquals
,StringGreaterThanEqualsPath
-
StringLessThan
,StringLessThanPath
-
StringLessThanEquals
,StringLessThanEqualsPath
-
StringMatches
-
TimestampEquals
,TimestampEqualsPath
-
TimestampGreaterThan
,TimestampGreaterThanPath
-
TimestampGreaterThanEquals
,TimestampGreaterThanEqualsPath
-
TimestampLessThan
,TimestampLessThanPath
-
TimestampLessThanEquals
,TimestampLessThanEqualsPath
對於每個運算子,對應的值必須是適當的類型:字串、數字、布林值或時間戳記。Step Functions 不會嘗試將數值欄位與字串值比對。不過,由於時間戳記欄位邏輯上為字串,因此 StringEquals
比較子可以比對被視為時間戳記的欄位。
注意
為了實現互通性,請勿假設數值比較使用超出 IEEE 754-2008 binary64
資料類型[-253+1,
253-1]
之外的整數可能無法以預期的方式進行比較。
時間戳記 (例如 2016-08-18T17:33:00Z
) 必須符合RFC3339設定檔 ISO 8601
-
大寫字母
T
必須分開日期與時間部分。 -
大寫字母
Z
必須表示不存在數字時間時區位移。
若要了解字串比較行為,請參閱 Java compareTo
文件
And
和 Or
運算子的值必須是本身不得包含 Next
欄位的非空白選擇規則陣列。同樣地,Not
運算子的值必須是不得包含 Next
欄位的單一選擇規則。
您可以使用 And
、Not
及 Or
,建立複雜的巢狀選擇規則。不過,Next
欄位只能出現在最上層選擇規則中。
可以使用比較運算子,與具有一或多個萬用字元 (“*”) 的模式進行字串 StringMatches 比較。使用標準 逸出萬用字元\\ (Ex: “\\*”)
。比對期間,除了「*」之外,沒有任何字元具有任何特殊意義。