サーバーレスワークフロー の子フローを統合する機能を使用すると、フロー内で別のフローを実行できます。このトピックでは、サーバーレスワークフロー の子フローのシナリオ、統合モード、コンテキストオブジェクト、および入出力ルールについて説明します。
シナリオ
サーバーレスワークフロー の子フローを統合する機能は、次のシナリオに適用できます。
- フローを複数の子フローに分割して、フローの複雑さを軽減します。
- フローの再利用を容易にします。共通のステップをフローに配置し、これらのステップを他のフローで再利用できます。
- 現在の単一フローの制限を削除します。たとえば、単一フローにはデフォルトで最大 5,000 イベントを含めることができ、最大実行時間は 1 年です。
- フロー全体の出力のエラー処理を実装します。たとえば、並列ステップを子フローとして設計し、親フローで子フローの実行中に発生したエラーを処理できます。
統合モード
サーバーレスワークフロー は、リクエスト/レスポンス、同期、およびコールバック待機の 3 つの統合モードをサポートしています。
- リクエスト/レスポンスモード このモードでは、子フローが開始されるとすぐに、親フローは次のステップの実行を開始します。次のコードはフローを定義しています。
version: v1 type: flow steps: - type: task name: fnfInvoke resourceArn: acs:fnf:::flow/subflow_demo_child pattern: requestResponse # デフォルトモードです。このパラメータを指定する必要はありません。 inputMappings: # inputMappings が指定されていない場合、デフォルトのマッピングルールが使用されます。つまり、親フローのパラメータが子フローへの入力として使用されます。 - target: childName # サービスで開始される子フローの実行名。 source: $input.childName serviceParams: # サーバーレスワークフローに統合されているサービスのパラメータ。このパラメータを指定する必要はありません。このパラメータが指定されていない場合、ランダムな文字列がこの実行の名前として使用され、inputMappings に含まれるパラメータが子フローへの入力として使用されます。 Input: $ # マップされた入力パラメータを、子フローを開始するための入力パラメータとして使用します。 ExecutionName: $.childName # serviceParams に変数が指定されている場合は、この変数が inputMappings に存在することを確認してください。 - 同期モード
このモードでは、親フローは子フローを開始し、子フローの実行が完了した後に次のステップに進みます。次のコードはフローを定義しています。
version: v1 type: flow steps: - type: parallel name: parallelTask branches: - steps: # このステップでは、サーバーレスワークフローは同期モードで統合されます。inputMappings は子フローへの入力として使用され、子フローの実行名は親フローへの入力に基づいて動的に指定されます。 - type: task name: fnfSync resourceArn: acs:fnf:::flow/subflow_demo_child pattern: sync inputMappings: # inputMappings が指定されていない場合、デフォルトのマッピングルールが使用されます。つまり、親フローのパラメータが子フローへの入力として使用されます。 - target: childSyncName # サービスで開始される子フローの実行名。子フローの実行名を指定する場合は、この例のように、ターゲット実行名に対して入力マッピングを実行し、serviceParams でマップされた結果を使用します。 source: $input.childSyncName. serviceParams: # サーバーレスワークフローに統合されているサービスのパラメータ。 Input: $ # マップされた入力パラメータを、子フローを開始するための入力パラメータとして使用します。他の方法で Input の動作と構文を明示的に指定しない限り、提供されている方法を使用することをお勧めします。 ExecutionName: $.childSyncName # serviceParams に変数が指定されている場合は、この変数が inputMappings に存在することを確認してください。 - コールバック待機モード
このモードでは、親フローは子フローを開始し、コールバック通知を受信するまで中断状態になります。次のコードはフローを定義しています。
version: v1 type: flow steps: - steps: # このステップでは、サーバーレスワークフローはコールバック待機モードで統合されます。inputMappings は子フローへの入力として使用され、子フローの実行名は親フローへの入力に基づいて動的に指定されます。 - type: task name: fnfWaitForCallback resourceArn: acs:fnf:::flow/subflow_demo_child pattern: waitForCallback inputMappings: # inputMappings が指定されていない場合、デフォルトのマッピングルールが使用されます。つまり、親フローのパラメータが子フローへの入力として使用されます。 -target: task_token # 子フローでコールバックを使用できるようにするには、task_token をカスタム名にマップします。 source: $context.task.token # コンテキストオブジェクトからタスクを識別するタスクトークンを取得します。 - target: childCallbackName source: $input.childCallbackName serviceParams: # サーバーレスワークフローに統合されているサービスのパラメータ。 Input: $ # マップされた入力パラメータを、子フローを開始するための入力パラメータとして使用します。 ExecutionName: $.childCallbackName # serviceParams に変数が指定されている場合は、この変数が inputMappings に存在することを確認してください。
コンテキストオブジェクトの説明
子フローの統合モードでは、$context.execution.name 変数と $context.flow.name 変数を子フローに渡して、子フローを開始する親フローを識別できます。wait-for-callback モードでは、$context.task.token を使用して、親フローの識別子
を子フローに渡してコールバックを実装します。
子フローの入出力ルール
- リクエスト/レスポンスモード
このモードでは、子フローへの入力は、対応するタスクステップの入力から派生します。子フローで
$Inputを指定することで入力を取得できます。子フローの開始情報 (
StartExecutionの呼び出しからのレスポンス) が出力として使用されますが、子フローの出力は親フローによって無視されます。子フローが開始されると、デフォルトで次の開始情報が提供されます。$local.ExecutionName、$local.FlowName、および$local.RequestId。子フローの他の出力パラメータを親フローにマップする場合は、親フローの対応するステップで出力マッピングを実行することでマップできます。- type: task pattern: requestResponse ... outputMappings: # リクエスト/レスポンスモードでは、$local.ExecutionName、$local.FlowName、および $local.RequestId パラメータを取得できます。 - target: subflow_children_request_id source: $local.RequestId # 子フローを開始するリクエストの ID。 - target: subflow_children_exec_name source: $local.ExecutionName # 開始される子フローの実行名。 - target: subflow_children_flow_name source: $local.FlowName # 開始される子フローのフロー名。 - 同期モード
このモードでは、子フローへの入力は、対応するタスクステップの入力から派生します。子フローで
$Inputを指定することで入力を取得できます。子フローの出力 (
DescribeExecutionの呼び出しからのレスポンスのOutput) は、親フローのこのステップの出力として親フローに返されます。この出力は、親フローの後続のステップで使用できます。子フローの他の出力パラメータを親フローにマップする場合は、出力マッピングを実行することでマップできます。 - コールバック待機モード
このモードでは、子フローへの入力は、対応するタスクステップの入力から派生します。子フローで
$Inputを指定することで入力を取得できます。コールバックの出力は、親フローにおけるこのステップの出力として使用されます。
Outputパラメーターの値は、ReportTaskSucceededオペレーションを呼び出すときに渡され、親フローにおけるこのステップの出力として使用されます。Error パラメーターと Cause パラメーターの値は、ReportTaskFailedオペレーションを呼び出すときに渡され、親フローにおけるこのステップの出力として使用されます。子フローの他の出力パラメーターを親フローにマッピングする場合は、出力マッピングを実行することでマッピングできます。