

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

# Step Functions ワークフローでインラインモードでマップ状態を使用する
<a name="state-map-inline"></a>

**ステートの管理とデータの変換**  
[変数を使用したステート間のデータ受け渡し](workflow-variables.md)と [JSONata を使用したデータ変換](transforming-data.md)について説明します。

デフォルトでは、`Map` 状態は **[インライン]** モードで実行されます。インラインモードでは、マップステートは JSON 配列のみを入力として受け入れます。ワークフローの前のステップから、この配列を受け取ります。このモードでは、`Map` 状態のそれぞれの反復は、`Map` 状態を含むワークフローのコンテキストで実行されます。Step Functions は、これらの反復の実行履歴を親ワークフローの実行履歴に追加します。

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

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

*インラインマップステート*の使用の概要については、チュートリアル [インラインマップでアクションを反復する](tutorial-map-inline.md) を参照してください。

**Topics**
+ [このトピックの主要概念](#key-concepts-inline-map)
+ [インラインマップステートのフィールド](#map-state-inline-additional-fields)
+ [廃止されたフィールド](#map-state-inline-deprecated-fields)
+ [Inline Map ステートの例 (JSONPath)](#inline-map-state-examples)
+ [`ItemSelector` によるインラインマップステートの例](#inline-map-state-example-params)
+ [インライン `Map` 状態の入出力処理](#inline-map-state-output)

## このトピックの主要概念
<a name="key-concepts-inline-map"></a>

**インラインモード**  
`Map` 状態の制限付き同時実行モード。このモードでは、`Map` 状態のそれぞれの反復は、`Map` 状態を含むワークフローのコンテキストで実行されます。Step Functions は、これらの反復の実行履歴を親ワークフローの実行履歴に追加します。`Map` 状態はデフォルトではインラインモードで実行されます。  
このモードは JSON 配列のみを入力として受け入れ、最大 40 回の同時反復をサポートします。

**インラインマップステート**  
**[インライン]** モードに設定された `Map` 状態。

**マップワークフロー**  
`Map`各反復で状態が実行する一連のステップ。

**マップステートの繰り返し**  
`Map` 状態内で定義されたワークフローの繰り返し。

## インラインマップステートのフィールド
<a name="map-state-inline-additional-fields"></a>

ワークフローで*インラインマップステート*を使用するには、これらのフィールドを 1 つ以上指定します。これらのフィールドは、[共通状態フィールド](statemachine-structure.md#amazon-states-language-common-fields)に加えて指定します。

**`Type` (必須)**  
状態のタイプ (`Map` など) を設定します。

**`ItemProcessor` (必須)**  
`Map` 状態処理モードと定義を指定する次の JSON オブジェクトが含まれます。  
定義には、各配列項目を処理する際に繰り返す一連の手順が含まれています。  
+ `ProcessorConfig` - `Map` 状態の処理モードを指定するオプションの JSON オブジェクト。このオブジェクトには `Mode` サブフィールドが含まれます。このフィールドのデフォルトは `INLINE` で、インラインモードの `Map` 状態を使用します。

  このモードでは、反復処理が失敗すると `Map` 状態も失敗します。`Map` 状態に障害が発生すると、すべての反復処理が停止します。
+ `StartAt` - ワークフローの最初の状態を示す文字列を指定します。この文字列は、大文字と小文字が区別され、いずれかの状態オブジェクトの名前と完全に一致する必要があります。この状態は、データセット内の各アイテムで最初に実行されます。`Map` 状態に提供した実行入力は、まず `StartAt` 状態に渡されます。
+ `States` – カンマで区切られた一連の[状態](workflow-states.md)を含む JSON オブジェクト。このオブジェクトでは、[Map workflow](#mapwflow)を定義します。
**注記**  
`ItemProcessor` フィールド内の状態は相互にしか遷移できません。フィールド外の状態は、`ItemProcessor` フィールド内の状態に遷移することはできません。
`ItemProcessor` フィールドは、現在廃止された `Iterator` フィールドに置き換わります。`Iterator` フィールドを使用する `Map` 状態は引き続き含めることができますが、このフィールドを `ItemProcessor` に置き換えることを強くお勧めします。  
[Step Functions Local](sfn-local.md) は現在 `ItemProcessor` フィールドをサポートしていません。`Iterator` フィールドは、Step Functions Local で使用することをお勧めします。

**`Items` (オプション、JSONata のみ)**  
配列に評価される必要がある JSON 配列または JSONata 式。

**`ItemsPath` (オプション、JSONPath のみ)**  
[JsonPath](https://datatracker.ietf.org/wg/jsonpath/about/) 構文を使用して[リファレンスパス](amazon-states-language-paths.md#amazon-states-language-reference-paths)を指定します。このパスは、状態入力内の項目の配列を含む JSON ノードを選択します。詳細については、「[ItemsPath (マップ、JSONPath のみ)](input-output-itemspath.md)」を参照してください。

**`ItemSelector` (オプション)**  
各 `Map` 状態反復に渡される前に、入力配列項目の値をオーバーライドします。  
このフィールドでは、キーと値のペアのコレクションを含む有効な JSON を指定します。これらのペアには以下のいずれかを含めることができます。  
+ ステートマシンの定義で定義する静的値。
+ [パス](amazon-states-language-paths.md)を使用して状態入力から選択された値。
+ [コンテキストオブジェクト](input-output-contextobject.md)からアクセスされる値。
 詳細については、「[ItemSelector (Map)](input-output-itemselector.md)」を参照してください。  
`ItemSelector` フィールドは、現在廃止された `Parameters` フィールドに置き換わります。`Parameters` フィールドを使用する `Map` 状態は引き続き含めることができますが、このフィールドを `ItemSelector` に置き換えることを強くお勧めします。

**`MaxConcurrency` (オプション)**  
並行して実行できる `Map` 状態の反復数の上限を示す整数値を指定します。例えば、`MaxConcurrency` 値が 10 の場合、`Map` 状態の反復の同時実行数は一度に 10 回に制限されます。  
 JSONata ステートでは、整数として評価される JSONata 式を指定できます。  
同時反復は制限される場合があります。この状況が起こったときは、前の反復が完了するまで一部の反復は開始されません。入力配列の項目が 40 を超えると、この問題が発生する可能性が高くなります。  
同時実行性を高めるには、[分散モード](state-map-distributed.md) を検討してください。
デフォルト値は `0` で、同時実行数に制限はありません。Step Functions は可能な限り同時に反復を呼び出します。  
`MaxConcurrency` 値が `1` の場合、配列要素ごとに 1 回ずつ `ItemProcessor` を呼び出します。配列内の項目は、入力に現れる順に処理されます。Step Functions は、前の反復が完了するまで新しい反復を開始しません。

**`MaxConcurrencyPath` (オプション、JSONPath のみ)**  
リファレンスパスを使用して状態の入力からタイムアウト値を動的に最大同時実行値を指定する場合は、`MaxConcurrencyPath` を使用してください。解決されると、リファレンスパスは、値が負でない整数のフィールドを選択する必要があります。  
`Map` 状態には `MaxConcurrency` と `MaxConcurrencyPath` の両方を含めることはできません。

**`ResultPath` (オプション、JSONPath のみ)**  
`Map` 状態の反復の出力を入力のどこに保存するかを指定します。次に、マップステートは [`OutputPath`](input-output-example.md#input-output-outputpath) フィールドの指定に従って入力をフィルタリングします (指定されている場合)。次に、フィルター処理された入力を状態の出力として使用します。詳細については、[入力および出力処理](concepts-input-output-filtering.md)を参照してください。

**`ResultSelector` (オプション、JSONPath のみ)**  
値が静的であるか結果から選択された、キーバリューのペアの集合を渡します。詳細については、「[ResultSelector](input-output-inputpath-params.md#input-output-resultselector)」を参照してください。  
ステートマシンで使用している並列またはマップステートが配列の配列を返す場合は、[ResultSelector](input-output-inputpath-params.md#input-output-resultselector) フィールドを使用して配列をフラットな配列に変換できます。詳細については、「[配列の配列の平坦化](input-output-inputpath-params.md#flatten-array-of-arrays-result-selector)」を参照してください。

**`Retry` (オプション)**  
Retrier と呼ばれるオブジェクトの配列。再試行ポリシーを定義します。状態はランタイムエラーが発生すると再試行ポリシーを使用します。詳細については、「[Retry と Catch を使用するステートマシンの例](concepts-error-handling.md#error-handling-examples)」を参照してください。  
*インライン状態*に Retrier を定義すると、リトライポリシーは、失敗した反復だけではなくすべての `Map` 状態の反復に適用されます。例えば、`Map` 状態の反復が 2 回成功し、反復が 1 回失敗したとします。`Map` 状態の `Retry` フィールドを定義した場合、リトライポリシーは、失敗した反復だけでなく、3 回の `Map` 状態反復すべてに適用されます。

**`Catch` (オプション)**  
Catcher と呼ばれるオブジェクトの配列で、フォールバック状態を定義します。状態は、ランタイムエラーが発生し、リトライポリシーが設定されていないか、リトライポリシーが使い果たされた場合に、catcher を実行します。詳細については、「[フォールバック状態](concepts-error-handling.md#error-handling-fallback-states)」を参照してください。

**`Output` (オプション、JSONata のみ)**  
ステートからの出力を指定して変換するために使用します。指定すると、ステートのデフォルト出力がオーバーライドされます。  
Output フィールドは、あらゆる型の JSON 値 (オブジェクト、配列、文字列、数値、boolean、null) を受け入れます。すべての文字列値は、オブジェクトや配列内の値を含め、\$1% %\$1 文字で囲まれていれば、JSONata として評価されます。  
 Output は JSONata 式を直接受け入れることもできます。例: "Output": "\$1% jsonata expression %\$1"  
詳細については、「[Step Functions での JSONata を使用したデータ変換](transforming-data.md)」を参照してください。

** `Assign` (オプション)**  
変数を保存するために使用します。`Assign` フィールドは、変数名とその割り当て値を定義するキーと値のペアを含む JSON オブジェクトを受け入れます。すべての文字列値は、オブジェクトや配列内の値を含め、`{% %}` 文字で囲まれていれば、JSONata として評価されます。  
詳細については、「[変数を使用したステート間のデータ受け渡し](workflow-variables.md)」を参照してください。

## 廃止されたフィールド
<a name="map-state-inline-deprecated-fields"></a>

**注記**  
次のフィールドを使用する `Map` 状態は引き続き含めることができますが、この `Iterator` を `ItemProcessor` に `Parameters` を `ItemSelector` に置き換えることを強くお勧めします。

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

**`Parameters`**  
キーには次のいずれかを含めることができる、キーと値のペアの集合を指定します。  
+ ステートマシンの定義で定義する静的値。
+ [パス](amazon-states-language-paths.md)を使用して入力から選択された値。

## Inline Map ステートの例 (JSONPath)
<a name="inline-map-state-examples"></a>

**[インライン]** モードで実行されている `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:account-id:function:ship-val:$LATEST"
                },
                "End": true
            }
        }
    },
    "End": true,
    "ResultPath": "$.detail.shipped",
    "ItemsPath": "$.shipped"
}
```

`Map` 状態の各反復は、[`ItemsPath`](input-output-itemspath.md) フィールドで選択された、配列にある項目を `ship-val` Lambda 関数への入力として送信します。以下の値は、Lambda 関数の呼び出しに対して `Map` 状態が送信する入力の例です。

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

完了すると、`Map` 状態の出力は JSON 配列となります。配列の各項目は反復の出力です。この場合、この配列には `ship-val` Lambda 関数の出力が含まれます。

## `ItemSelector` によるインラインマップステートの例
<a name="inline-map-state-example-params"></a>

前の例の `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:region:account-id:function:ship-val",
        "End": true
      }
    }
  },
  "End": true
}
```

`ItemSelector` ブロックは反復への入力を JSON ノードに置き換えます。このノードには、[Context オブジェクト](input-output-contextobject.md#contextobject-map)からの現在の項目データと、`Map` ステートの入力の `delivery-partner` フィールドからの運送会社に関する情報の両方が含まれています。以下に示すのは、1 回の反復処理への入力の例です。`Map` 状態は、この入力を `ship-val` Lambda 関数の呼び出しに渡します。

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

前述の*インラインマップステート*の例では、`ResultPath` フィールドは入力と同じ形式で出力を生成します。ただし、各要素が各反復の `ship-val` Lambda 呼び出しの出力である配列で `detail.shipped` フィールドが上書きされます。

*インラインマップステート*とそのフィールドの使用方法の詳細については、以下を参照してください。
+ [インラインマップでアクションを反復する](tutorial-map-inline.md)
+ [Step Functions の入力および出力処理](concepts-input-output-filtering.md)
+ [ItemsPath (マップ、JSONPath のみ)](input-output-itemspath.md)
+ [Map ステートにおける Context オブジェクトのデータ](input-output-contextobject.md#contextobject-map)

## インライン `Map` 状態の入出力処理
<a name="inline-map-state-output"></a>

特定の `Map` 状態について、[`InputPath`](input-output-inputpath-params.md#input-output-inputpath) は状態の入力のサブセットを選択します。

`Map` 状態の入力には JSON 配列が含まれている必要があります。`Map` 状態は配列内の項目ごとに `ItemProcessor` セクションを 1 回実行します。[`ItemsPath`](input-output-itemspath.md) フィールドを指定すると、`Map` 状態は反復処理の対象となる配列を検索する入力内の場所を選択します。場所を指定しない場合、`ItemsPath` の値は `$` となり、`ItemProcessor` セクションはこの配列が唯一の入力であると見なします。`ItemsPath` フィールドを指定する場合、その値は[リファレンスパス](amazon-states-language-paths.md#amazon-states-language-reference-paths)である必要があります。`Map` 状態は、`InputPath` を適用した後に、このパスを有効な入力に適用します。`ItemsPath` は、値が JSON 配列であるフィールドを識別する必要があります。

各反復への入力は、デフォルトでは、`ItemsPath` 値で識別される配列フィールドの単一の要素です。この値は、`ItemSelector (Map)` フィールドで上書きできます。

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

 インラインマップステートの入力と出力の詳細については、以下を参照してください。
+ [インラインマップでアクションを反復する](tutorial-map-inline.md)
+ [`ItemSelector` によるインラインマップステートの例](#inline-map-state-example-params)
+ [Step Functions の入力および出力処理](concepts-input-output-filtering.md)
+ [Map ステートにおける Context オブジェクトのデータ](input-output-contextobject.md#contextobject-map)
+ [Step Functions で Map 状態を持つキューのデータを処理する](sample-map-state.md)