

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

# Parallel ワークフローの状態
<a name="state-parallel"></a>

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

`Parallel` 状態 (`"Type": "Parallel"`) はステートマシンで実行する個別のブランチを追加するために使用できます。

[[common state fields]](statemachine-structure.md#amazon-states-language-common-fields) (共通状態フィールド) に加えて、`Parallel` 状態には次の追加のフィールドがあります。

** `Branches` (必須)**  
ステートマシンで並列して実行する状態を指定するオブジェクトの配列。このような各ステートマシンオブジェクトには `States` および `StartAt` というフィールドが必要です。これらの意味はステートマシンの最上位にあるものとまったく同様です。

**`Parameters` (オプション、JSONPath のみ)**  
`Branches` 配列で定義されたステートマシンに情報を渡すために使用します。

**`Arguments` (オプション、JSONata のみ)**  
接続されたリソースの API アクションに情報を渡すのに使用します。値には JSONata 式を含めることができます。詳細については、「[Step Functions での JSONata を使用したデータ変換](transforming-data.md)」を参照してください。

**`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)」を参照してください。

** `ResultPath` (オプション、JSONPath のみ)**  
ブランチの出力を配置する (入力内の) 場所を指定します。その後、入力は `OutputPath` フィールド (ある場合) に従ってフィルタリングされてから状態の出力に使用されます。詳細については、[入力および出力処理](concepts-input-output-filtering.md)を参照してください。

** `ResultSelector` (オプション、JSONPath のみ)**  
値が静的であるか、結果から選択されたキーバリューのペアの集合を渡します。詳細については、「[ResultSelector](input-output-inputpath-params.md#input-output-resultselector)」を参照してください。

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

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

`Parallel` 状態 AWS Step Functions は、 が各ブランチを、そのブランチの `StartAt`フィールドで という名前の状態から開始して、可能な限り同時に実行し、すべてのブランチが終了 (終了状態に達する) するまで待ってから`Parallel`、状態の `Next`フィールドを処理します。

## 並行状態の例
<a name="parallel-example"></a>

```
{
  "Comment": "Parallel Example.",
  "StartAt": "LookupCustomerInfo",
  "States": {
    "LookupCustomerInfo": {
      "Type": "Parallel",
      "End": true,
      "Branches": [
        {
         "StartAt": "LookupAddress",
         "States": {
           "LookupAddress": {
             "Type": "Task",
             "Resource": "arn:aws:lambda:region:account-id:function:AddressFinder",
             "End": true
           }
         }
       },
       {
         "StartAt": "LookupPhone",
         "States": {
           "LookupPhone": {
             "Type": "Task",
             "Resource": "arn:aws:lambda:region:account-id:function:PhoneFinder",
             "End": true
           }
         }
       }
      ]
    }
  }
}
```

この例では、`LookupAddress` および `LookupPhone` ブランチは並行して実行されます。Step Functions コンソールでの視覚的なワークフローの外観を次に示します。

![\[Parallel ワークフローの例のビジュアルグラフ。\]](http://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/images/parallel-state.png)


各ブランチは自己完結型である必要があります。`Parallel` 状態の 1 つのブランチの状態にはそのブランチ外のフィールドをターゲットにする `Next` フィールドがあってはなりません。また、そのブランチ外の他の状態からこのブランチに移行することもできません。

## 並行状態の入出力処理
<a name="state-parallel-output"></a>

`Parallel` 状態は各ブランチに自身の入力データ (`InputPath` フィールドによって変更される場合があります) のコピーを提供します。そのブランチからの出力を含む各ブランチの 1 つの要素から成る配列である出力が生成されます。すべての要素が同じタイプである必要はありません。出力配列は、通常の方法で `ResultPath` を使用して入力データに挿入し、全部を `Parallel` 状態の出力として送信できます ([入力および出力処理](concepts-input-output-filtering.md)を参照)。

```
{
  "Comment": "Parallel Example.",
  "StartAt": "FunWithMath",
  "States": {
    "FunWithMath": {
      "Type": "Parallel",
      "End": true,
      "Branches": [
        {
          "StartAt": "Add",
          "States": {
            "Add": {
              "Type": "Task",
              "Resource": "arn:aws:states:region:123456789012:activity:Add",
              "End": true
            }
          }
        },
        {
          "StartAt": "Subtract",
          "States": {
            "Subtract": {
              "Type": "Task",
              "Resource": "arn:aws:states:region:123456789012:activity:Subtract",
              "End": true
            }
          }
        }
      ]
    }
  }
}
```

`FunWithMath` 状態に入力として配列 `[3, 2]` が提供される場合、`Add` および `Subtract` 状態は両方ともその配列を入力として受信します。`Add` と `Subtract` タスクの出力は、配列要素 3 と 2 の和と差、つまり `5` と `1` になり、`Parallel` 状態の出力は配列になります。

```
[ 5, 1 ]
```

**ヒント**  
ステートマシンで使用している並列またはマップステートが配列の配列を返す場合は、[ResultSelector](input-output-inputpath-params.md#input-output-resultselector) フィールドを使用して配列をフラットな配列に変換できます。詳細については、「[配列の配列の平坦化](input-output-inputpath-params.md#flatten-array-of-arrays-result-selector)」を参照してください。

## エラー処理
<a name="error-handling"></a>

処理されないエラーまたは `Fail` 状態に移行したためにブランチが失敗すると、`Parallel` 状態全体が失敗とみなされ、そのすべてのブランチが停止します。エラーが `Parallel` 状態自体で処理されない場合、Step Functions は実行をエラーで停止します。

**注記**  
並列状態が失敗しても、呼び出された Lambda 関数が実行し続けられるため、タスクトークンを処理するアクティビティワーカーが停止することはありません。  
長時間稼働のアクティビティを停止するには、ハートビートを使用して、ブランチが Step Functions によって停止されたかどうかを検出し、タスクを処理しているワーカーを停止します。[https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html)、[https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskSuccess.html)、または [https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskFailure.html](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskFailure.html) を呼び出すと、そのステートが失敗している場合にエラーがスローされます。[ハートビートエラー](https://docs.aws.amazon.com/step-functions/latest/apireference/API_SendTaskHeartbeat.html#API_SendTaskHeartbeat_Errors)を参照してください。
Lambda 関数の実行は停止できません。フォールバックを実装している場合は、Lambda 関数終了後にクリーンアップが行われるように `Wait` 状態を使用します。