並列ワークフローの状態 - AWS Step Functions

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

並列ワークフローの状態

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

[common state fields] (共通状態フィールド) に加えて、Parallel 状態には次の追加のフィールドがあります。

Branches (必須)

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

ResultPath (オプション)

ブランチの出力を配置する (入力内の) 場所を指定します。その後、入力は OutputPath フィールド (ある場合) に従ってフィルタリングされてから状態の出力に使用されます。詳細については、入力および出力処理を参照してください。

ResultSelector (オプション)

値が静的であるか、結果から選択されたキーバリューのペアの集合を渡します。詳細については、「ResultSelector」を参照してください。

Retry (オプション)

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

Catch (オプション)

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

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

並行状態の例

{ "Comment": "Parallel Example.", "StartAt": "LookupCustomerInfo", "States": { "LookupCustomerInfo": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "LookupAddress", "States": { "LookupAddress": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:AddressFinder", "End": true } } }, { "StartAt": "LookupPhone", "States": { "LookupPhone": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:PhoneFinder", "End": true } } } ] } } }

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

並列ワークフローの例のビジュアルグラフ。

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

並行状態の入出力処理

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

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

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

[ 5, 1 ]
ヒント

ステートマシンで使用している並列またはマップステートが配列の配列を返す場合は、ResultSelector フィールドを使用して配列をフラットな配列に変換できます。詳細については、「配列の配列の平坦化」を参照してください。

エラー処理

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

注記

並列状態が失敗しても、呼び出された Lambda 関数が実行し続けられるため、タスクトークンを処理するアクティビティワーカーが停止することはありません。

  • 長時間稼働のアクティビティを停止するには、ハートビートを使用して、ブランチが Step Functions によって停止されたかどうかを検出し、タスクを処理しているワーカーを停止します。SendTaskHeartbeatSendTaskSuccess、または SendTaskFailure を呼び出すと、状態が失敗した場合にエラーがスローされます。ハートビートエラーを参照してください。

  • Lambda 関数の実行は停止できません。フォールバックを実装している場合は、Lambda 関数終了後にクリーンアップが行われるように Wait 状態を使用します。