翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Step Functions ワークフローでインラインモードでマップ状態を使用する
状態の管理とデータの変換
Step Functions は最近、状態を管理し、データを変換JSONataするために変数 と を追加しました。
変数を使用したデータの受け渡しと を使用したデータの変換JSONataについて説明します。
デフォルトでは、Map
状態は [インライン] モードで実行されます。インラインモードでは、マップ状態はJSON配列のみを入力として受け入れます。ワークフローの前のステップから、この配列を受け取ります。このモードでは、Map
状態のそれぞれの反復は、Map
状態を含むワークフローのコンテキストで実行されます。Step Functions は、これらの反復の実行履歴を親ワークフローの実行履歴に追加します。
このモードでは、Map
状態は最大 40 回の同時反復をサポートします。
[インライン] に設定された Map
ステートはインラインマップステートと呼ばれます。ワークフローの実行履歴が 25,000 エントリを超えない場合や、同時反復が 40 回以上必要ない場合は、Map
状態をインラインモードで使用します。
インラインマップステートの使用の概要については、チュートリアル インラインマップでアクションを反復する を参照してください。
内容
このトピックの主要概念
- インラインモード
-
Map
状態の制限付き同時実行モード。このモードでは、Map
状態のそれぞれの反復は、Map
状態を含むワークフローのコンテキストで実行されます。Step Functions は、これらの反復の実行履歴を親ワークフローの実行履歴に追加します。Map
状態はデフォルトではインラインモードで実行されます。このモードはJSON、配列を入力としてのみ受け入れ、最大 40 回の同時反復をサポートします。
- インラインマップステート
-
[インライン] モードに設定された
Map
状態。 - マップワークフロー
Map
各反復で状態が実行する一連のステップ。- マップステートの繰り返し
-
Map
状態内で定義されたワークフローの繰り返し。
インラインマップステートのフィールド
ワークフローでインラインマップステートを使用するには、これらのフィールドを 1 つ以上指定します。これらのフィールドは、共通状態フィールドに加えて指定します。
Type
(必須)-
状態のタイプ (
Map
など) を設定します。 ItemProcessor
(必須)-
Map
状態処理モードと定義を指定する次のJSONオブジェクトが含まれます。定義には、各配列項目を処理する際に繰り返す一連の手順が含まれています。
-
ProcessorConfig
–Map
状態の処理モードを指定するオプションのJSONオブジェクト。このオブジェクトにはMode
サブフィールドが含まれます。このフィールドのデフォルトはINLINE
で、インラインモードのMap
状態を使用します。このモードでは、反復処理が失敗すると
Map
状態も失敗します。Map
状態に障害が発生すると、すべての反復処理が停止します。
StartAt
- ワークフローの最初の状態を示す文字列を指定します。この文字列は、大文字と小文字が区別され、いずれかの状態オブジェクトの名前と完全に一致する必要があります。この状態は、データセット内の各アイテムで最初に実行されます。Map
状態に提供した実行入力は、まずStartAt
状態に渡されます。-
States
– コンマで区切られた状態セットを含むJSONオブジェクト。このオブジェクトでは、Map workflowを定義します。注記
-
ItemProcessor
フィールド内の状態は相互にしか遷移できません。フィールド外の状態は、ItemProcessor
フィールド内の状態に遷移することはできません。 -
ItemProcessor
フィールドは、現在廃止されたIterator
フィールドに置き換わります。Iterator
フィールドを使用するMap
状態は引き続き含めることができますが、このフィールドをItemProcessor
に置き換えることを強くお勧めします。Step Functions Local は現在
ItemProcessor
フィールドをサポートしていません。Iterator
フィールドは、Step Functions Local で使用することをお勧めします。
-
-
Items
(オプション、 JSONata のみ)-
JSON 配列または配列に評価する必要があるJSONata式。
ItemsPath
(オプション、 JSONPath のみ)-
JsonPath
構文を使用して参照パスを指定します。このパスは、状態入力内の項目の配列を含むJSONノードを選択します。詳細については、「ItemsPath (マップ、JSONPathのみ)」を参照してください。 ItemSelector
(オプション)-
各
Map
状態反復に渡される前に、入力配列項目の値をオーバーライドします。このフィールドでは、キーと値のペアのコレクションJSONを含む有効な を指定します。これらのペアには以下のいずれかを含めることができます。
-
ステートマシンの定義で定義する静的値。
-
パスを使用して状態入力から選択された値。
-
コンテキストオブジェクトからアクセスされる値。
詳細については、「ItemSelector (マップ)」を参照してください。
ItemSelector
フィールドは、現在廃止されたParameters
フィールドに置き換わります。Parameters
フィールドを使用するMap
状態は引き続き含めることができますが、このフィールドをItemSelector
に置き換えることを強くお勧めします。 -
MaxConcurrency
(オプション)-
並行して実行できる
Map
状態の反復数の上限を示す整数値を指定します。例えば、MaxConcurrency
値が 10 の場合、Map
状態の反復の同時実行数は一度に 10 回に制限されます。JSONata 状態では、整数に評価されるJSONata式を指定できます。
注記
同時反復は制限される場合があります。この状況が起こったときは、前の反復が完了するまで一部の反復は開始されません。入力配列の項目が 40 を超えると、この問題が発生する可能性が高くなります。
同時実行性を高めるには、分散モード を検討してください。
デフォルト値は
0
で、同時実行数に制限はありません。Step Functions は可能な限り同時に反復を呼び出します。MaxConcurrency
値が1
の場合、配列要素ごとに 1 回ずつItemProcessor
を呼び出します。配列内の項目は、入力に現れる順に処理されます。Step Functions は、前の反復が完了するまで新しい反復を開始しません。 MaxConcurrencyPath
(オプション、 JSONPath のみ)-
リファレンスパスを使用して状態の入力からタイムアウト値を動的に最大同時実行値を指定する場合は、
MaxConcurrencyPath
を使用してください。解決されると、リファレンスパスは、値が負でない整数のフィールドを選択する必要があります。注記
Map
状態にはMaxConcurrency
とMaxConcurrencyPath
の両方を含めることはできません。 ResultPath
(オプション、 JSONPath のみ)-
Map
状態の反復の出力を入力のどこに保存するかを指定します。次に、マップステートは OutputPath フィールドの指定に従って入力をフィルタリングします (指定されている場合)。次に、フィルター処理された入力を状態の出力として使用します。詳細については、入力および出力処理を参照してください。 ResultSelector
(オプション、 JSONPath のみ)-
値が静的であるか結果から選択された、キーバリューのペアの集合を渡します。詳細については、「ResultSelector」を参照してください。
ヒント
ステートマシンで使用している並列またはマップステートが配列の配列を返す場合は、ResultSelector フィールドを使用して配列をフラットな配列に変換できます。詳細については、「配列の配列の平坦化」を参照してください。
Retry
(オプション)-
Retrier と呼ばれるオブジェクトの配列。再試行ポリシーを定義します。状態はランタイムエラーが発生すると再試行ポリシーを使用します。詳細については、「Retry と Catch を使用するステートマシンの例」を参照してください。
注記
インライン状態に Retrier を定義すると、リトライポリシーは、失敗した反復だけではなくすべての
Map
状態の反復に適用されます。例えば、Map
状態の反復が 2 回成功し、反復が 1 回失敗したとします。Map
状態のRetry
フィールドを定義した場合、リトライポリシーは、失敗した反復だけでなく、3 回のMap
状態反復すべてに適用されます。 Catch
(オプション)-
Catcher と呼ばれるオブジェクトの配列で、フォールバック状態を定義します。状態は、ランタイムエラーが発生し、リトライポリシーが設定されていないか、リトライポリシーが使い果たされた場合に、catcher を実行します。詳細については、「フォールバック状態」を参照してください。
Output
(オプション、 JSONata のみ)-
状態からの出力を指定および変換するために使用されます。指定すると、値は状態出力のデフォルトを上書きします。
出力フィールドは任意のJSON値 (オブジェクト、配列、文字列、数値、ブール値、null) を受け入れます。オブジェクトまたは配列内の文字列値を含む文字列値は、{% %} 文字で囲まれたJSONataものとして評価されます。
出力は式を直接受け入れます。たとえば、JSONata「Output」:「{% jsonata expression %}」です。
詳細については、「Step Functions での JSONata を使用したデータの変換」を参照してください。
-
Assign
(オプション) -
変数を保存するために使用されます。
Assign
フィールドは、変数名と割り当てられた値を定義するキーと値のペアを持つJSONオブジェクトを受け入れます。オブジェクトまたは配列内の文字列値を含む文字列値は、{% %}
文字で囲まれたJSONataときに として評価されます。詳細については、「変数を使用して状態間でデータを渡す」を参照してください。
廃止されたフィールド
注記
次のフィールドを使用する Map
状態は引き続き含めることができますが、この Iterator
を ItemProcessor
に Parameters
を ItemSelector
に置き換えることを強くお勧めします。
-
Iterator
-
配列の各要素を処理する一連のステップを定義するJSONオブジェクトを指定します。
Parameters
-
キーには次のいずれかを含めることができる、キーと値のペアの集合を指定します。
-
ステートマシンの定義で定義する静的値。
-
パスを使用して入力から選択された値。
-
インラインマップ状態の例 (JSONPath)
[インライン] モードで実行されている Map
状態の次の入力データについて考えてみます。
{
"ship-date": "2016-03-14T01:59:00Z",
"detail": {
"delivery-partner": "UQS",
"shipped": [
{ "prod": "R31", "dest-code": 9511, "quantity": 1344 },
{ "prod": "S39", "dest-code": 9511, "quantity": 40 },
{ "prod": "R31", "dest-code": 9833, "quantity": 12 },
{ "prod": "R40", "dest-code": 9860, "quantity": 887 },
{ "prod": "R40", "dest-code": 9511, "quantity": 1220 }
]
}
}
前の入力の場合、次の例Map
の状態は、 shipped
フィールドの配列の各項目に対して という名前の AWS Lambda 関数を 1 ship-val
回呼び出します。
"Validate All": {
"Type": "Map",
"InputPath": "$.detail",
"ItemProcessor": {
"ProcessorConfig": {
"Mode": "INLINE"
},
"StartAt": "Validate",
"States": {
"Validate": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"OutputPath": "$.Payload",
"Parameters": {
"FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:ship-val:$LATEST
"
},
"End": true
}
}
},
"End": true,
"ResultPath": "$.detail.shipped",
"ItemsPath": "$.shipped"
}
Map
状態の各反復は、ItemsPath フィールドで選択された、配列にある項目を ship-val
Lambda 関数への入力として送信します。以下の値は、Lambda 関数の呼び出しに対して Map
状態が送信する入力の例です。
{
"prod": "R31",
"dest-code": 9511,
"quantity": 1344
}
完了すると、 Map
状態の出力はJSON配列になり、各項目は反復の出力になります。この場合、この配列には ship-val
Lambda 関数の出力が含まれます。
ItemSelector
によるインラインマップステートの例
前の例の ship-val
Lambda 関数でも、配送の運送会社に関する情報も必要であるとします。この情報は、繰り返しのたびに配列内の項目に追加されます。Map
状態の現在の反復に固有である情報に加えて、入力からの情報を含めることもできます。次の例の ItemSelector
フィールドに注目してください。
"Validate-All": {
"Type": "Map",
"InputPath": "$.detail",
"ItemsPath": "$.shipped",
"MaxConcurrency": 0,
"ResultPath": "$.detail.shipped",
"ItemSelector": {
"parcel.$": "$$.Map.Item.Value",
"courier.$": "$.delivery-partner"
},
"ItemProcessor": {
"StartAt": "Validate",
"States": {
"Validate": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:ship-val",
"End": true
}
}
},
"End": true
}
ItemSelector
ブロックは、反復への入力をJSONノードに置き換えます。このノードには、コンテキストオブジェクトからの現在の項目データと、Map
状態入力の delivery-partner
フィールドからの運送会社情報の両方が含まれます。以下に示すのは、1 回の反復処理への入力の例です。Map
状態は、この入力を ship-val
Lambda 関数の呼び出しに渡します。
{
"parcel": {
"prod": "R31",
"dest-code": 9511,
"quantity": 1344
},
"courier": "UQS"
}
前述のインラインマップステートの例では、ResultPath
フィールドは入力と同じ形式で出力を生成します。ただし、各要素が各反復の ship-val
Lambda 呼び出しの出力である配列で detail.shipped
フィールドが上書きされます。
インラインマップステートとそのフィールドの使用方法の詳細については、以下を参照してください。
インライン Map
状態の入出力処理
特定の Map
状態について、InputPath は状態の入力のサブセットを選択します。
Map
状態の入力にはJSON配列が含まれている必要があります。Map
状態は配列内の項目ごとに ItemProcessor
セクションを 1 回実行します。ItemsPath フィールドを指定すると、Map
状態は反復処理の対象となる配列を検索する入力内の場所を選択します。場所を指定しない場合、ItemsPath
の値は $
となり、ItemProcessor
セクションはこの配列が唯一の入力であると見なします。ItemsPath
フィールドを指定する場合、その値はリファレンスパスである必要があります。Map
状態は、InputPath
を適用した後に、このパスを有効な入力に適用します。は、値がJSON配列であるフィールドを識別ItemsPath
する必要があります。
各反復への入力は、デフォルトでは、ItemsPath
値で識別される配列フィールドの単一の要素です。この値は、ItemSelector (マップ)
フィールドで上書きできます。
完了すると、 Map
状態の出力はJSON配列になり、各項目は反復の出力になります。
インラインマップステートの入力と出力の詳細については、以下を参照してください。