翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Choice ワークフローの状態
ステートの管理とデータの変換
変数を使用したステート間のデータ受け渡しと JSONata を使用したデータ変換について説明します。
Choice 状態 ("Type": "Choice") はステートマシンに条件付きロジックを追加します。
共通状態フィールドの大半に加えて、Choice 状態には次の追加フィールドが含まれます。
Choices(必須)-
ステートマシンが次に移行する状態を決定する選択ルールの配列。
Choice状態では、少なくとも 1 つのルールを定義する必要があります。Choiceステートが実行されると、Step Functions はそれぞれの Choice ルールを true または false に評価します。この評価結果に基づいて、Step Functions はワークフロー内の次のステートへ遷移します。 Default(オプション、推奨)-
どの Choice ルールも true に評価されなかった場合に遷移する先のステートの名前。
重要
Choice 状態では End フィールドはサポートされません。また、Next は Choices フィールド内でのみ使用されます。
ワークフローの実行中にどの Choice も true に評価されず、Default が指定されていない場合、そのステートからの遷移失敗によりエラーがスローされます。
Choice ルール (JSONata)
Choice ステートでは、JSONata を使用する場合、Choices フィールドを指定する必要があります。このフィールドには、次のフィールドを含む、1 つ以上の Choice ルールを指定します。
-
Conditionフィールド – true/false に評価される JSONata 式。 -
Nextフィールド – ステートマシン内のステートの名前と一致する必要のある値。 -
Assignフィールド (オプション) – この特定の選択ルールが一致すると変数を割り当てます。各選択ルールは独自のAssignブロックを持つことができ、どのパスを取るかに応じて異なる変数を設定できます。状態レベルでAssignブロックを指定することもできます。これは、どの選択ルールが一致するかに関係なく適用されます。
次の例では、数値が 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"
}
次の例は、一致した条件に基づいて異なる変数を設定するルールごとのAssignブロックを持つChoice状態を示しています。
{
"Type": "Choice",
"Choices": [
{
"Condition": "{% $states.input.category = 'premium' %}",
"Next": "PremiumPath",
"Assign": {
"discount": 20
}
},
{
"Condition": "{% $states.input.category = 'standard' %}",
"Next": "StandardPath",
"Assign": {
"discount": 5
}
}
],
"Default": "DefaultPath",
"Assign": {
"discount": 0
}
}
選択状態で割り当てを使用する
Assign フィールドは、Choice 状態の 2 つのレベルで使用できます。
-
最上位 – Choice ルールの外部で、Choice 状態で直接定義されます。
-
選択ルール内 –
Choices配列内の個々のルール内で定義されます。
これら 2 つの配置は、実行時に相互に排他的です。選択ルールが一致した場合、Step Functions はそのルールの Assignフィールドのみを評価し、最上位Assignフィールドは評価しません。Step Functions は、選択ルールが一致しず、ワークフローが Default状態に移行したAssign場合にのみ、最上位レベルを評価します。
次の例は、両方の配置を示しています。
{
"Type": "Choice",
"Assign": {
"outputValue": "{% 'default path taken' %}"
},
"Choices": [
{
"Condition": "{% $score > 90 %}",
"Assign": {
"outputValue": "{% 'high score' %}"
},
"Next": "HighScoreState"
},
{
"Condition": "{% $score > 50 %}",
"Next": "MediumScoreState"
}
],
"Default": "LowScoreState"
}
この例では、 $scoreが 90 より大きい場合、Step Functions は outputValueを に割り当て"high score"、 に移行しますHighScoreState。最上位レベルAssignは評価されません。ルールが一致しない場合、Step Functions は最上位レベルを評価しAssign、 に移行しますLowScoreState。
Choice ルール (JSONPath)
Choice ステートでは、JSONPath を使用する場合、Choices フィールドを指定する必要があります。このフィールドには、次のフィールドを含む、1 つ以上の Choice ルールを指定します。
-
比較 – 比較する入力変数、比較のタイプ、および可変を比較する値に指定する 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
}
次の例は、IsPresent 選択ルール が先行しているため、$.keyThatMightNotExist が 存在する場合は、StringEquals ルールのみが評価される方法を示しています。
"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-2008binary64 データタイプ[-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 フィールドは最上位の選択ルールにのみ使用できます。
1 つ以上のワイルドカード (「*」) を使用したパターンに対する文字列比較は、StringMatches 比較演算子を使用して実行できます。ワイルドカード文字は、スタンダード \\ (Ex: “\\*”) を使用してエスケープされます。「*」以外の文字は、マッチング中に特別な意味を持ちません。