インラインモードでのマップステートの使用 - AWS Step Functions

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

インラインモードでのマップステートの使用

デフォルトでは、Mapステートはインラインモードで実行されます。インラインモードでは、Map ステートは JSON 配列のみを入力として受け入れます。ワークフローの前述のステップからこの配列を受け取ります。このモードでは、ステートの各イテレーションは、Mapステートを含むワークフローのコンテキストで実行されます。MapStep Functions は、これらのイテレーションの実行履歴を親ワークフローの実行履歴に追加します。

このモードでは、Mapステートは最大40回の同時反復をサポートします。

InlineMap に設定されたステートはインラインマップステートと呼ばれます。ワークフローの実行履歴が 25,000 エントリを超えない場合や、40 回を超える同時反復が必要ない場合は、Mapこのステートをインラインモードで使用してください。

インラインマップステートの使い方の概要については、チュートリアルを参照してくださいインラインマップステートを使用してアクションを繰り返す

このトピックの主な概念

インラインモード

Map州の限定同時実行モード。このモードでは、ステートの各イテレーションは、Mapステートを含むワークフローのコンテキストで実行されます。MapStep Functions は、これらのイテレーションの実行履歴を親ワークフローの実行履歴に追加します。 Mapステートはデフォルトでインラインモードで実行されます。

このモードは JSON 配列のみを入力として受け入れ、最大 40 回の同時反復をサポートします。

インラインマップ状態の状態

Mapステートはインラインモードに設定されています

マップワークフロー

Mapステートがイテレーションごとに実行する一連のステップ。

マップ状態のイテレーション

Mapステート内で定義されたワークフローの繰り返し。

インラインマップ状態のフィールド

ワークフローでインラインマップステートを使用するには、これらのフィールドを 1 つ以上指定します。これらのフィールドは、一般的なステートフィールドに加えて指定します

Type (必須)

ステートのタイプ (など) を設定しますMap

ItemProcessor (必須)

Map状態処理モードと定義を指定する次の JSON オブジェクトが含まれています。

定義には、各配列項目を処理する際に繰り返す一連のステップが含まれています。

  • ProcessorConfigMap ステートの処理モードを指定するオプションの JSON オブジェクト。Modeこのオブジェクトにはサブフィールドが含まれます。このフィールドのデフォルトはでINLINEMapインラインモードの状態を使用します。

    このモードでは、Mapいずれかの反復が失敗するとステートが失敗します。Mapステートが失敗すると、すべての反復が停止します。

  • StartAt— ワークフローの最初の状態を示す文字列を指定します。この文字列では大文字と小文字が区別され、いずれかの状態オブジェクトの名前と一致する必要があります。このステートは、データセット内のアイテムごとに最初に実行されます。ステートに提供した実行入力は、MapStartAt最初にステートに渡されます。

  • 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 (オプション)

parallelMap に実行できる状態の各反復の同時実行数の上限を示す整数値を指定します。例えば、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 つ含まれているとします。RetryMapステートのフィールドを定義した場合、再試行ポリシーは、失敗したイテレーションだけでなく、3Map つのステートイテレーションすべてに適用されます。

Catch (オプション)

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

廃止されたフィールド

注記

Map以下のフィールドを使用する州は引き続き含めることができますが、IteratorItemProcessorParametersとに置き換えることを強くお勧めしますItemSelector

Iterator

配列の各要素を処理する一連のステップを定義する JSON オブジェクトを指定します。

Parameters

キーバリューのペアの集合を指定します。値には以下のいずれかを含めることができます。

インラインマップ状態の例

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 ノードに置き換えます。このノードには、コンテキストオブジェクトからの現在のアイテムデータとMapdelivery-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 配列となります。配列の各項目は反復の出力です。

インラインマップ状態の入力と出力の詳細については、以下を参照してください。