Choice - AWS Step Functions

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Choice

Choice 状態 ("Type": "Choice") はステートマシンに分岐ロジックを追加します。

のほとんどに加えて、共通状態フィールド,Choice状態では、以下の追加フィールドが導入されます。

Choices (必須)

ステートマシンが次に移行する状態を決定する Choice ルールの配列。

Default (オプション、推奨)

Choices のいずれの移行も実行されない場合の移行先の状態の名前。

重要

Choice 状態では End フィールドはサポートされません。また、NextChoices フィールド内でのみ使用されます。

Choice 状態の例

以下は、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、ValueInTwentiesステータスに基づいて、valuefields。

Choice 状態の Choices と一致するものがない場合、Default フィールドに指定されている状態が代わりに実行されます。Default 状態が指定されていない場合は、エラーで失敗します。

Choice ルール

Choice 状態には、必ず Choices フィールドがあります。値は空でない配列であり、その各要素は Choice ルールと呼ばれるオブジェクトです。Choice ルールには次のものが含まれます。

  • Acomparison— 比較する入力変数、比較のタイプ、および変数を比較する値を指定する 2 つのフィールド。選択肢ルールは、2 つの変数間の比較をサポートします。選択ルール内で、変数の値は、追加することによって状態入力から別の値と比較することができますPathサポートされている比較演算子の名前に。

  • ANextfield— このフィールドの値はステートマシンの状態名と一致する必要があります。

次の例では、数値が 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が存在するため、前のIsPresentChoice ルール。

"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、に示された順序で各 Choice ルールを検討します。Choicesfields。次に、最初の Choice ルールの 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 演算子は Choice ルールの空ではない配列の値であり、それ自体に Next フィールドを含まない必要があります。同様に、Not 演算子の値は単一の Choice ルールである必要があり、Next フィールドを含めることはできません。

AndNot、および Or を使用して、複雑なネスト化された Choice ルールを作成できます。ただし、Next フィールドは最上位の Choice ルールにのみ使用できます。

1 つ以上のワイルドカード (「*」) を持つパターンに対する文字列比較は、StringMatches 比較演算子を使用して実行できます。ワイルドカード文字は、標準の\\ (Ex: “\\*”)。「*」以外の文字は、マッチング中に特別な意味を持ちません。