翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
選択ワークフローの状態
Choice
状態 ("Type": "Choice"
) はステートマシンに条件付きロジックを追加します。
共通状態フィールドの大半に加えて、Choice
状態には次の追加フィールドが含まれます。
Choices
(必須)-
ステートマシンが次に移行する状態を決定する選択ルールの配列。選択ルールで比較演算子を使用して、入力変数を特定の値と比較します。例えば、選択ルールを使用すると、入力変数が 100 より大きいか小さいかを比較できます。
Choice
状態が実行されると、各選択ルールは true または false と評価されます。この評価の結果に基づいて、Step Functions はワークフローの次の状態に移行します。Choice
状態では、少なくとも 1 つのルールを定義する必要があります。 Default
(オプション、推奨)-
Choices
のいずれの移行も実行されない場合の移行先の状態の名前。
重要
Choice
状態では End
フィールドはサポートされません。また、Next
は Choices
フィールド内でのみ使用されます。
ヒント
Choice
状態を使用するワークフローの例を にデプロイするには AWS アカウント、「ワークショップ」の「モジュール 5 - 選択状態とマップ状態
選択ルール
Choice
状態には値が空でない配列の Choices
フィールドが必要です。この配列の各要素は選択ルールというオブジェクトで、以下の内容が含まれています。
-
比較 – 比較する入力変数、比較のタイプ、および可変を比較する値に指定する 2 つのフィールド。選択ルールは、2 つの可変の比較をサポートします。選択ルール内で、可変値は、サポートされている比較演算子の名前に
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 ルールのために IsPresent
$.keyThatMightNotExist
が存在する場合にのみルールがどのように評価されるかを示しています。
"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
コンパレータで一致させることはできます。
注記
相互運用性のために、数値比較が IEEE754-2008 binary64
データ型[-253+1,
253-1]
の範囲外の整数では想定した形での比較が失敗する可能性があります。
タイムスタンプ ( など2016-08-18T17:33:00Z
) はプロファイル RFC33398601 ISO
-
大文字の
T
で日付部分と時刻部分を区切る必要があります。 -
大文字の
Z
で数値タイムゾーンオフセットが存在しないことを示す必要があります。
文字列比較の動作を理解するには、Java compareTo
のドキュメント
And
および Or
演算子は選択ルールの空ではない配列の値であり、それ自体に Next
フィールドを含まない必要があります。同様に、Not
演算子の値は単一の選択ルールである必要があり、Next
フィールドを含めることはできません。
And
、Not
、および Or
を使用して、複雑なネスト化された選択ルールを作成できます。ただし、Next
フィールドは最上位の選択ルールにのみ使用できます。
1 つ以上のワイルドカード (「*」) を持つパターンに対する文字列比較は、 StringMatches 比較演算子を使用して実行できます。ワイルドカード文字は、スタンダード \\ (Ex: “\\*”)
を使用してエスケープされます。「*」以外の文字は、マッチング中に特別な意味を持ちません。
選択状態の例
以下は、Choice
状態および移行先の他の状態の例です。
注記
$.type
フィールドを指定する必要があります。状態の入力に $.type
フィールドが含まれていない場合は、実行が失敗し、実行履歴にエラーが表示されます。文字列をリテラル値と一致する StringEquals
フィールドに指定することしかできません。例えば、"StringEquals": "Buy"
と指定します。
"ChoiceStateX": {
"Type": "Choice",
"Choices": [
{
"Not": {
"Variable": "$.type",
"StringEquals": "Private"
},
"Next": "Public"
},
{
"Variable": "$.value",
"NumericEquals": 0,
"Next": "ValueIsZero"
},
{
"And": [
{
"Variable": "$.value",
"NumericGreaterThanEquals": 20
},
{
"Variable": "$.value",
"NumericLessThan": 30
}
],
"Next": "ValueInTwenties"
}
],
"Default": "DefaultState"
},
"Public": {
"Type" : "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:Foo",
"Next": "NextState"
},
"ValueIsZero": {
"Type" : "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:Zero",
"Next": "NextState"
},
"ValueInTwenties": {
"Type" : "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:Bar",
"Next": "NextState"
},
"DefaultState": {
"Type": "Fail",
"Cause": "No Matches!"
}
この例では、以下の入力値を使用してステートマシンが開始されます。
{
"type": "Private",
"value": 22
}
Step Functions は、value
フィールドに基づいて、ValueInTwenties
状態に移行します。
Choice
状態の Choices
と一致するものがない場合、Default
フィールドに指定されている状態が代わりに実行されます。Default
状態が指定されていない場合は、エラーで失敗します。