Serverless Workflow の子フロー機能を使用すると、あるフロー内から別のフローを実行できます。このページでは、Serverless Workflow における子フローの利用シーン、統合モード、コンテキストオブジェクト、および入出力ルールについて説明します。
利用シーン
次のいずれかの要件がある場合は、Serverless Workflow の統合をご利用ください。
- 大規模なフローを、より小さく管理しやすいフローに分割する。
- 複数のフロー間で共通のステップを再利用する。
- 単一フローの制限(例:最大イベント数(デフォルト:5,000)、最大実行時間(1 年))を回避する。
- コントロールステップ内の障害ポイントを処理する。たとえば、並列ステップを子フローとして作成し、親フロー内でその実行時の障害をハンドルします。
統合モード
Serverless Workflow の統合には、リクエスト/レスポンス(requestResponse)、同期(sync)、コールバック待ち(waitForCallback)の 3 つのモードがあります。
- リクエスト/レスポンス(requestResponse)モード親フローは子フローを開始した直後に次のステップに進みます。
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: # Serverless Workflow 統合用のサービスパラメーター。このパラメーターはオプションです。省略した場合、ランダムな文字列が実行名として使用され、InputMappings に対応するパラメーターが子フローの入力として使用されます。 Input: $ # マップされた入力を子フローの起動時の入力パラメーターとして使用します。 ExecutionName: $.childName # serviceParams 内で変数を使用する場合は、その変数が inputMappings に存在することを確認してください。 - 同期(sync)モード
親フローは子フローを開始し、完了を待ってから次のステップに進みます。
version: v1 type: flow steps: - type: parallel name: parallelTask branches: - steps: # このステップは、sync モードで Serverless Workflow と統合する方法を示しています。inputMappings を子フローの入力として使用し、親フローの入力から子フローの実行名を動的に指定します。 - type: task name: fnfSync resourceArn: acs:fnf:::flow/subflow_demo_child pattern: sync inputMappings: # inputMappings を指定しない場合、親フローのパラメーターがデフォルトのマッピングルールに基づいて子フローの入力として使用されます。 - target: childSyncName # 子フローの実行名。子フローの実行名を指定するには、inputMappings で目的の名前をマップし、この例のように serviceParams で使用します。 source: $input.childSyncName serviceParams: # Serverless Workflow 統合用のサービスパラメーター。 Input: $ # マップされた inputMappings を子フローの起動時の入力パラメーターとして使用します。他の入力指定方法の動作や構文を確実に理解している場合を除き、この方法を使用してください。 ExecutionName: $.childSyncName # serviceParams 内で変数を使用する場合は、その変数が inputMappings に存在することを確認してください。 - コールバック待ち(waitForCallback)モード
親フローは子フローを開始し、コールバック通知を受信するまで一時停止します。
version: v1 type: flow steps: - steps: # このステップは、waitForCallback モードで Serverless Workflow と統合する方法を示しています。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: # Serverless Workflow 統合用のサービスパラメーター。 Input: $ # マップされた inputMappings を子フローの起動時の入力パラメーターとして使用します。 ExecutionName: $.childCallbackName # serviceParams 内で変数を使用する場合は、その変数が inputMappings に存在することを確認してください。
コンテキストオブジェクト
親フローを識別するために、子フローに $context.execution.name および $context.flow.name を渡します。waitForCallback モードでは、コールバックのために親フローの実行識別子を子フローに渡すために $context.task.token を使用します。
子フローの入出力ルール
- リクエスト/レスポンスモード
子フローはタスクの入力を受け取り、
$Inputからアクセスできます。出力は
StartExecutionAPI の応答となり、子フロー自身の出力は親フローによって無視されます。デフォルトで利用可能な値は、$local.ExecutionName、$local.FlowName、および$local.RequestIdの 3 つです。これらの値を処理するには、親フローのステップでoutputMappingsを使用します。- type: task pattern: requestResponse ... outputMappings: # requestResponse モードで利用可能なパラメーター:$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からアクセスできます。子フローの
Output(DescribeExecutionAPI 応答から取得)が親フローのステップ出力となります。この出力をさらに処理するには、outputMappingsを使用します。 - コールバック待ちモード
子フローはタスクの入力を受け取り、
$Inputからアクセスできます。コールバックデータがステップ出力となります。
ReportTaskSucceededの場合、Outputパラメーターの値がステップ出力になります。ReportTaskFailedの場合、Error および Cause パラメーターの値がステップ出力になります。この出力をさらに処理するには、outputMappingsを使用します。