Map - AWS Step Functions

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

Map

Map 状態 ("Type": "Map") を使用して、入力配列の要素ごとに一連のステップを実行できます。Parallel 状態は同じ入力を使用して複数のステップのブランチを実行しますが、 Map 状態は状態入力の配列の複数のエントリに対して同じステップを実行します。

Map 状態の使用の概要については、「Map 状態のチュートリアル」を参照してください。

共通状態フィールドに加えて、Map 状態には次の追加のフィールドがあります。

Iterator (必須)

Iterator フィールドの値は、配列の各要素を処理するステートマシンを定義するオブジェクトです。

ItemsPath(オプション)

ItemsPath フィールドの値は、有効な入力内で配列フィールドを見つける場所を識別する参照パスです。詳細については、「ItemsPath」を参照してください。

Iterator フィールド内の各状態はそのフィールド内の他の状態にのみ移行できます。Iterator フィールド外の状態からそのフィールド内の状態に移行することはできません。

いずれかの反復が失敗すると、Map 状態全体が失敗し、すべての反復が終了します。

MaxConcurrency(オプション)

MaxConcurrencyフィールドの値は、反復子の呼び出しを並列実行できる上限数を指定する整数です。たとえば、 MaxConcurrency 値が 10 の場合、 Map 状態の反復の同時実行数は 10 回に制限されます。

注記

同時反復は制限される場合があります。この現象が発生すると、一部の反復は前の反復が完了するまで開始されません。入力配列に40項目を超えると、この問題が発生する可能性が高くなります。

デフォルト値は 0 です。この場合、並列処理にクォータはなく、反復は可能な限り同時に呼び出されます。

MaxConcurrency 値が 1 の場合は、入力内に出現する順の各配列要素に対して Iterator が 1 回呼び出され、前の反復が完了するまで新しい反復は開始されません。

ResultPath(オプション)

ブランチの出力を配置する (入力内の) 場所を指定します。その後、入力は OutputPath フィールド (ある場合) に従ってフィルタリングされてから状態の出力に使用されます。詳細については、「入力および出力処理」を参照してください。

ResultSelector(オプション)

値が静的であるか、または結果から選択されるキーと値のペアの集合を渡します。詳細については、「ResultSelector」を参照してください。

Retry(オプション)

Retrier と呼ばれるオブジェクトの配列。状態でランタイムエラーが発生した場合の再試行ポリシーを定義します。詳細については、「再試行とキャッチの使用例」を参照してください。

Catch(オプション)

Catcher と呼ばれるオブジェクトの配列。状態でランタイムエラーが発生し、再試行ポリシーがすでに試された後または定義されていない場合に実行されるフォールバック状態を定義します。詳細については、「フォールバック状態」を参照してください。

Map 状態の例

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 関数 (ship-val) を 1 回呼び出します。

"Validate-All": { "Type": "Map", "InputPath": "$.detail", "ItemsPath": "$.shipped", "MaxConcurrency": 0, "Iterator": { "StartAt": "Validate", "States": { "Validate": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:ship-val", "End": true } } }, "ResultPath": "$.detail.shipped", "End": true }

各イテレーションMap状態は、配列内の項目を送信します (ItemsPathフィールド) を Lambda 関数への入力として使用します。たとえば、Lambda の 1 回の呼び出しへの入力は次のようになります。

{ "prod": "R31", "dest-code": 9511, "quantity": 1344 }

完了すると、Map状態は JSON 配列です。配列の各項目は反復の出力です (この例ではship-valLambda 関数)。

パラメータを使用した Map 状態の例

とすると、ship-val前の例の Lambda 関数では、出荷の宅配便に関する情報 (配列内の項目など) も必要としています。Map 状態の現在の反復に固有である情報に加えて、入力からの情報を含めることもできます。次の例の Parameters フィールドに注目してください。

"Validate-All": { "Type": "Map", "InputPath": "$.detail", "ItemsPath": "$.shipped", "MaxConcurrency": 0, "ResultPath": "$.detail.shipped", "Parameters": { "parcel.$": "$$.Map.Item.Value", "courier.$": "$.delivery-partner" }, "Iterator": { "StartAt": "Validate", "States": { "Validate": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:ship-val", "End": true } } }, "End": true }

Parameters ブロックは、反復への入力を JSON ノードに置き換えます。この JSON ノードには、コンテキストオブジェクトからの現在の項目データと Map 状態入力の delivery-partner フィールドからの運送会社情報の両方が含まれています。次の例は、1 つの反復への入力例です。反復は、ship-valLambda 関数。

{ "parcel": { "prod": "R31", "dest-code": 9511, "quantity": 1344 }, "courier": "UQS" }

以前のののMap状態の例では、ResultPathフィールドは入力と同じ出力を生成しますが、detail.shippedフィールドは配列によって上書きされ、各要素がship-val各反復のLambda 関数。

詳細については、以下を参照してください。

Map 状態の入出力処理

Map 状態に対して、InputPath は他の状態タイプと同じように機能し、入力のサブセットを選択します。

Map 状態の入力には JSON 配列を含める必要があり、配列の各項目に対して 1 回ずつ Iterator セクションが実行されます。この配列を入力内で見つける場所を指定するには、 ItemsPath フィールドを使用します。場所を指定しない場合、ItemsPath の値は $ となり、 Iterator セクションはこの配列が唯一の入力であると見なします。Map 状態には、ItemsPath フィールドを含めることもできます。このフィールドの値は参照パスであることが必要です。ItemsPath フィールドは、反復に使用される配列を入力内で見つける場所を選択します。参照パスは、有効な入力に適用され (InputPath の適用後)、JSON 配列を値とするフィールドを識別する必要があります。

各反復への入力は、デフォルトでは、 ItemsPath 値で識別される配列フィールドの単一の要素です。これは、 Parameters フィールドを使用して上書きできます。

完了すると、 Map 状態の出力は JSON 配列となります。配列の各項目は反復の出力です。

詳細については、以下を参照してください。