翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
マップ
Map
状態 ("Type": "Map"
) を使用して、入力配列の要素ごとに一連のステップを実行できます。並行
状態は同じ入力を使用して複数のステップのブランチを実行しますが、Map
状態は状態入力の配列の複数のエントリに対して同じステップを実行します。
Map
状態の使用の概要については、マップ状態のチュートリアルを参照してください。
[common state fields] (共通状態フィールド) に加えて、Map
状態には次の追加のフィールドがあります。
-
Iterator
(必須) -
Iterator
フィールドの値は、配列の各要素を処理するステートマシンを定義するオブジェクトです。 -
ItemsPath
(オプション) -
ItemsPath
フィールドの値は、有効な入力内で配列フィールドを見つける場所を識別するリファレンスパスです。詳細については、「ItemsPath」を参照してください。Iterator
フィールド内の各状態はそのフィールド内の他の状態にのみ移行できます。Iterator
フィールド外の状態からそのフィールド内の状態に移行することはできません。いずれかの反復が失敗すると、マップ状態全体が失敗し、すべての反復が終了します。
-
MaxConcurrency
(オプション) -
MaxConcurrency
フィールドの値は、反復子の呼び出しを並列実行できる上限数を指定する整数です。例えば、MaxConcurrency
値が 10 の場合、Map
状態の反復の同時実行数は 10 回に制限されます。注記 同時反復は制限される場合があります。この状況が起こった時は、一部の反復は前の反復が完了するまで開始されません。入力配列の項目が 40 を超えると、この問題が発生する可能性が高くなります。
同時実行数を増やすには、カスケードするネストされたステートマシンを使用することを検討してください。
Map
States。たとえば、1024 の同時実行性を実現するには、Map
32回繰り返す状態で、そのステートマシンをMap
32 回反復する上位レベルのステートマシンの状態。デフォルト値は
0
です。この場合、並列処理にクォータはなく、反復は可能な限り同時に呼び出されます。MaxConcurrency
値が1
の場合は、入力内に出現する順の各配列要素に対してIterator
が 1 回呼び出され、前の反復が完了するまで新しい反復は開始されません。 -
ResultPath
(オプション) -
ブランチの出力を配置する (入力内の) 場所を指定します。その後、入力は
OutputPath
フィールド (ある場合) に従ってフィルタリングされてから状態の出力に使用されます。詳細については、入力および出力処理を参照してください。 -
ResultSelector
(オプション) -
値が静的であるか、結果から選択されたキーバリューのペアの集合を渡します。詳細については、「ResultSelector」を参照してください。
-
Retry
(オプション) -
Retrier と呼ばれるオブジェクトの配列。状態でランタイムエラーが発生した場合の再試行ポリシーを定義します。詳細については、「Retry の使用例と Catch の使用例」を参照してください。
-
Catch
(オプション) -
Catcher と呼ばれるオブジェクトの配列。状態でランタイムエラーが発生し、再試行ポリシーがすでに試された後または定義されていない場合に実行されるフォールバック状態を定義します。詳細については、フォールバック状態を参照してください。
マップ状態の例
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
状態は、AWS Lambda フィールドの配列の各項目に対して ship-val
関数 (shipped
) を 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-val
Lambda 関数の出力)。
パラメータを使用したマップ状態の例
前の例の ship-val
Lambda 関数で、配列の項目に加えて配送の運送会社に関する情報も各反復で必要であるとします。マップ状態の現在の反復に固有である情報に加えて、入力からの情報を含めることもできます。次の例の 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
フィールドからの運送会社情報の両方が含まれています。ship-val
Lambda 関数の呼び出しに渡される、1 つの反復への入力例を次に示します。
{
"parcel": {
"prod": "R31",
"dest-code": 9511,
"quantity": 1344
},
"courier": "UQS"
}
前の Map
状態の例で、ResultPath フィールドは入力と同じ出力を生成しますが、detail.shipped
フィールドは各反復の ship-val
Lambda 関数の出力を各要素とする配列で上書きされます。
詳細については、以下を参照してください。
マップ状態の入出力処理
マップ状態に対して、InputPath は他の状態タイプと同じように機能し、入力のサブセットを選択します。
Map
状態の入力には JSON 配列を含める必要があり、配列の各項目に対して 1 回ずつ Iterator
セクションが実行されます。この配列を入力内で見つける場所を指定するには、ItemsPath フィールドを使用します。場所を指定しない場合、ItemsPath
の値は $
となり、Iterator
セクションはこの配列が唯一の入力であると見なします。Map
状態には、ItemsPath フィールドを含めることもできます。このフィールドの値はリファレンスパスであることが必要です。ItemsPath
フィールドは、反復に使用される配列を入力内で見つける場所を選択します。リファレンスパスは、有効な入力に適用され (InputPath
の適用後)、JSON 配列を値とするフィールドを識別する必要があります。
各反復への入力は、デフォルトでは、ItemsPath
値で識別される配列フィールドの単一の要素です。これは、Parameters
フィールドを使用して上書きできます。
完了すると、Map
状態の出力は JSON 配列となります。配列の各項目は反復の出力です。
詳細については、以下を参照してください。