翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
インラインモードでのマップステートの使用
デフォルトでは、Map
ステートはインラインモードで実行されます。インラインモードでは、Map ステートは JSON 配列のみを入力として受け入れます。ワークフローの前述のステップからこの配列を受け取ります。このモードでは、ステートの各イテレーションは、Map
ステートを含むワークフローのコンテキストで実行されます。Map
Step Functions は、これらのイテレーションの実行履歴を親ワークフローの実行履歴に追加します。
このモードでは、Map
ステートは最大40回の同時反復をサポートします。
InlineMap
に設定されたステートは、インラインマップステートと呼ばれます。ワークフローの実行履歴が 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
現在廃止されているフィールドに置き換わります。Map
このフィールドを使用する州は引き続き含めることができますが、Iterator
このフィールドをに置き換えることを強くお勧めしますItemProcessor
。
-
-
ItemsPath
(オプション)-
JsonPath構文を使用して参照パスを指定します。このパスは、状態入力内の項目の配列を含む JSON ノードを選択します。詳細については、「ItemsPath」を参照してください。
ItemSelector
(オプション)-
Map
各ステート反復に渡される前に、入力配列項目の値をオーバーライドします。このフィールドでは、キーバリューのペアの集合を含む有効な JSON を指定します。これらのペアには以下のいずれかを含めることができます。
-
ステートマシンの定義で定義する静的値。
詳細については、「ItemSelector」を参照してください。
ItemSelector
このフィールドは、Parameters
現在廃止されているフィールドに置き換わります。Map
このフィールドを使用する州は引き続き含めることができますが、Parameters
このフィールドをに置き換えることを強くお勧めしますItemSelector
。 -
MaxConcurrency
(オプション)-
parallel
Map
に実行できる状態の各反復の同時実行数の上限を示す整数値を指定します。例えば、MaxConcurrency
値が 10 の場合Map
、同時実行数は 10 回に制限されます。注記 同時反復は制限される場合があります。この状況が起こった時は、一部の反復は前の反復が完了するまで開始されません。入力配列の項目が 40 を超えると、この問題が発生する可能性が高くなります。
より高い並行性を実現するには、検討してください分散モードでのマップステートの使用。
デフォルト値はで
0
、同時実行数に制限はありません。Step Functions は、可能な限り同時に反復を呼び出します。MaxConcurrency
値がの場合、配列要素ごとにItemProcessor
11
回ずつ呼び出されます。配列内の項目は、入力に出現する順に処理されます。Step Functions は、前のイテレーションを完了するまで新しいイテレーションを開始しません。 ResultPath
(オプション)-
Map
入力のどこに状態の反復の同時実行数を保存するかを指定します。次に、マップステートは、OutputPathフィールドで指定されたとおりに入力をフィルタリングします(指定されている場合)。次に、フィルター処理された入力をステートの出力として使用します。詳細については、入力および出力処理を参照してください。 ResultSelector
(オプション)-
値が静的であるか、結果から選択されたキーバリューのペアの集合を渡します。詳細については、「ResultSelector」を参照してください。
Retry
(オプション)-
再試行ポリシーを定義する「Retriers」と呼ばれるオブジェクトの配列。ステートは、ランタイムエラーが発生した場合に再試行ポリシーを使用します。詳細については、「Retry の使用例と Catch の使用例」を参照してください。
注記 インラインマップステートのリトライアーを定義すると、リトライポリシーは、失敗したイテレーションだけでなく、
Map
すべてのステートイテレーションに適用されます。たとえば、Map
ある州には成功した反復が 2 つと、失敗した反復が 1 つ含まれているとします。Retry
Map
ステートのフィールドを定義した場合、再試行ポリシーは、失敗したイテレーションだけでなく、3Map
つのステートイテレーションすべてに適用されます。 Catch
(オプション)-
Catcher と呼ばれるオブジェクトの配列で、フォールバック状態を定義します。ステートは、ランタイムエラーが発生し、再試行ポリシーがないか、再試行ポリシーが使い果たされた場合に、キャッチャーを実行します。詳細については、フォールバック状態を参照してください。
廃止されたフィールド
Map
以下のフィールドを使用する州は引き続き含めることができますが、Iterator
ItemProcessor
Parameters
とに置き換えることを強くお勧めしますItemSelector
。
インラインマップ状態の例
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、shipped
フィールドの各入力に対してship-val
1 回に制限されます。
"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 関数への入力として送信します。以下の値は、Map
州が Lambda 関数の呼び出しに送信する入力の例です。
{
"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
Lambdadetail.shipped
呼び出しの出力である配列でフィールドを上書きします。
インラインマップのステートステートとそのフィールドの使用方法の詳細については、以下を参照してください。
Map
インラインステート入出力処理
Map
特定のステートについて、InputPathステートの入力のサブセットを選択します。
Map
ステートの入力には JSON 配列を含める必要があります。Map
ステートは、ItemProcessor
配列内の各項目に対してセクションを 1 回実行します。ItemsPathフィールドを指定すると、Map
ステートは入力内のどこで反復処理する配列を見つけるかを選択します。場所を指定しない場合、ItemsPath
の値は $
となり、ItemProcessor
セクションはこの配列が唯一の入力であると見なします。ItemsPath
フィールドを指定する場合、その値は参照パスでなければなりません。Map
ステートは、を適用した後にこのパスを有効な入力に適用しますInputPath
。は、値が JSONItemsPath
配列であるフィールドを識別する必要があります。
各反復への入力は、デフォルトでは、ItemsPath
値で識別される配列フィールドの 1 回です。この値は、ItemSelector
フィールドで上書きすることができます。
完了すると、Map
状態の出力は JSON 配列となります。配列の各項目は反復の出力です。
インラインマップ状態の入力と出力の詳細については、以下を参照してください。