このチュートリアルでは、複数の子ワークフローを並行して実行する親ワークフローを作成して実行する方法について説明します。
次の図では、子ワークフローの 4 つの並列実行が呼び出されています。これにより、親ワークフローは並列ブランチでデータを処理し、全体的な実行時間を短縮できます。親ワークフローは、すべての子ワークフローの実行が完了するまで待機してから、成功した実行と失敗した実行の概要を返します。これにより、エラー検出が簡素化されます。
子ワークフローを作成してデプロイする
子ワークフローは、親ワークフローからデータを受け取って処理できます。子ワークフローは、次の処理を行うことでこれを示します。
- 引数として整数を受け取る
- 一部の処理をシミュレートするために10 秒間スリープする
ワークフロー実行の成功または失敗をシミュレートするインジケーター(整数が奇数か偶数かに基づく)を返します。
コンソール
Google Cloud コンソールで [ワークフロー] ページに移動します。
[
作成] をクリックします。新しいワークフローに「
workflow-child
」という名前を入力します。[リージョン] リストで [us-central1] を選択します。
先ほど作成したサービス アカウントを選択します。
[次へ] をクリックします。
ワークフロー エディタで、次のワークフローの定義を入力します。
[デプロイ] をクリックします。
gcloud
ワークフローのソースコード ファイルを作成します。
touch workflow-child.yaml
テキスト エディタでソースコード ファイルを開き、次のワークフローをファイルにコピーします。
ワークフローをデプロイします。
gcloud workflows deploy workflow-child \ --source=workflow-child.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
SERVICE_ACCOUNT_NAME
は、先ほど作成したサービス アカウントの名前に置き換えます。
親ワークフローを作成してデプロイする
親ワークフローは、並列 for
ループを使用して子ワークフローの複数のブランチを実行します。
ワークフロー定義のソースコードをコピーします。ソースコードは次のパートで構成されています。
マップは、子ワークフローの実行結果を保存するために使用されます。詳細については、マップをご覧ください。
for
ループが並列実行され、子ワークフローが呼び出されます。詳細については、並列ステップとイテレーションをご覧ください。子ワークフローは、コネクタを使用して呼び出されます。子ワークフローの各反復処理には、
iteration
引数が渡されます。親ワークフローは、各子ワークフローの実行結果を待って保存します。詳細については、Workflows Executions API コネクタとランタイム引数をご覧ください。実行結果が返されます。詳細については、ワークフローの実行を完了するをご覧ください。
ワークフローをデプロイします。
コンソール
Google Cloud コンソールで、[ワークフロー] ページに移動します。
[
作成] をクリックします。新しいワークフローに「
workflow-parent
」という名前を入力します。[リージョン] リストで [us-central1] を選択します。
先ほど作成したサービス アカウントを選択します。
[次へ] をクリックします。
ワークフロー エディタで、親ワークフローの定義を貼り付けます。
[デプロイ] をクリックします。
gcloud
ワークフローのソースコード ファイルを作成します。
touch workflow-parent.yaml
テキスト エディタでソースコード ファイルを開き、親ワークフローの定義を貼り付けます。
ワークフローをデプロイします。
gcloud workflows deploy workflow-parent \ --source=workflow-parent.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
SERVICE_ACCOUNT_NAME
は、先ほど作成したサービス アカウントの名前に置き換えます。
親ワークフローを実行する
子ワークフローの呼び出しが並行して実行されるように、親ワークフローを実行します。実行が完了するまでに約 10 秒かかります。
コンソール
Google Cloud コンソールで、[ワークフロー] ページに移動します。
[ワークフロー] ページで、[workflow-parent] ワークフローをクリックして詳細ページに移動します。
[ワークフローの詳細] ページで [play_arrow 実行] を選択します。
もう一度 [Execute] をクリックします。
ワークフローの結果が [出力] ペインに表示されます。
結果は次のようになります。イテレーション 2 と 4 でエラーが発生し、イテレーション 1 と 3 で成功したことがわかります。
"failure": { "2": { "message": "Execution failed or cancelled.", "operation": { "argument": "{\"iteration\":2}", "duration": "10.157992541s", "endTime": "2023-07-11T13:13:13.028424329Z", "error": { "context": "RuntimeError: \"Error with iteration 2\"\nin step \"raise_error\", routine \"main\", line: 18", "payload": "\"Error with iteration 2\"", ... "4": { "message": "Execution failed or cancelled.", "operation": { "argument": "{\"iteration\":4}", "duration": "10.157929734s", "endTime": "2023-07-11T13:13:13.061289142Z", "error": { "context": "RuntimeError: \"Error with iteration 4\"\nin step \"raise_error\", routine \"main\", line: 18", "payload": "\"Error with iteration 4\"", ... "success": { "1": "Hello world1", "3": "Hello world3"
gcloud
ワークフローを実行します。
gcloud workflows run workflow-parent \ --location=us-central1
結果は次のようになります。イテレーション 2 と 4 でエラーが発生し、イテレーション 1 と 3 で成功したことがわかります。
Waiting for execution [06c753e4-6947-4c62-ac0b-2a9d53fb1b8f] to complete...done. argument: 'null' duration: 14.065415004s endTime: '2023-07-11T12:50:43.929023883Z' name: projects/386837416586/locations/us-central1/workflows/workflow-parent/executions/06c753e4-6947-4c62-ac0b-2a9d53fb1b8f result: '{"failure":{"2":{"message":"Execution failed or cancelled.","operation":{"argument":"{\"iteration\":2}","duration":"10.143718070s","endTime":"2023-07-11T12:50:40.673209821Z","error":{"context":"RuntimeError: ... "Error with iteration 2\"\nin step \"raise_error\", routine \"main\", line: 18","payload":"\"Error ... "Error with iteration 4\"\nin step \"raise_error\", routine \"main\", line: 18","payload":"\"Error ... "success":{"1":"Hello world1","3":"Hello world3"}}' startTime: '2023-07-11T12:50:29.863608879Z' state: SUCCEEDED
子ワークフローを呼び出し、並列ブランチで子ワークフローの 4 つのイテレーションを実行し、各子ワークフローの実行の成功または失敗のインジケーターを返すワークフローが正常に作成され、デプロイされました。