このチュートリアルでは、複数の子ワークフローを並行して実行する親ワークフローを作成して実行する方法について説明します。
次の図では、子ワークフローの 4 つの並列実行が呼び出されます。これにより、親ワークフローは並列ブランチでデータを処理し、全体的な実行時間を短縮できます。親ワークフローは、すべての子ワークフローの実行が完了するまで待機してから、成功した実行と失敗した実行の概要を返します。これにより、エラー検出が簡素化されます。
目標
このチュートリアルの内容は次のとおりです。
- 親ワークフローからデータを受け取る子ワークフローを作成してデプロイする。
- 並列
forループを使用して複数の子ワークフローを実行する親ワークフローを作成してデプロイする。 - 子ワークフローの並列実行を呼び出す親ワークフローを実行する。
- 成功した子ワークフローの実行と失敗した子ワークフローの実行の結果はすべてマップに保存され、返される。
コンソールで次のコマンドを実行するか、ターミナルまたは Cloud Shell で Google Cloud CLI を使用できます。 Google Cloud
費用
このドキュメントでは、課金対象である次のコンポーネントを使用します。 Google Cloud
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
組織で定義されているセキュリティの制約により、次の手順を完了できない場合があります。トラブルシューティング情報については、 制約のある Google Cloud 環境でアプリケーションを開発するをご覧ください。
コンソール
-
ログイン Google アカウントにログインします。
Google アカウントをまだお持ちでない場合は、 新しいアカウントを登録します。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Workflow Executions and Workflows APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Create a service account:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles. -
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart. - Click Create and continue.
-
Grant the Workflows > Workflows Invoker role to the service account.
To grant the role, find the Select a role list, then select Workflows > Workflows Invoker.
- Click Continue.
-
Click Done to finish creating the service account.
-
Ensure that you have the Create Service Accounts IAM role
(
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Workflow Executions and Workflows APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Create a service account:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles. -
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart. - Click Create and continue.
-
Grant the Workflows > Workflows Invoker role to the service account.
To grant the role, find the Select a role list, then select Workflows > Workflows Invoker.
- Click Continue.
-
Click Done to finish creating the service account.
-
Ensure that you have the Create Service Accounts IAM role
(
gcloud
-
ログイン Google アカウントにログインします。
Google アカウントをまだお持ちでない場合は、 新しいアカウントを登録します。
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
プロジェクトを作成または選択します Google Cloud 。
プロジェクトを選択または作成するために必要なロール
- プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトを選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、プロジェクト作成者ロール
(
roles/resourcemanager.projectCreator)が必要です。これにはresourcemanager.projects.create権限が含まれています。詳しくは、ロールを付与する方法をご覧ください。
-
プロジェクトを作成します。 Google Cloud
gcloud projects create PROJECT_ID
PROJECT_IDは、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_IDは、 Google Cloud プロジェクトの名前に置き換えます。
Workflow Executions API と Workflows API を有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限が付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法をご覧ください。gcloud services enable workflowexecutions.googleapis.com
workflows.googleapis.com -
認証を設定します。
-
サービス アカウント作成者 IAM ロール
(
roles/iam.serviceAccountCreator)とプロジェクト IAM 管理者ロール (roles/resourcemanager.projectIamAdmin)があることを確認します。詳しくは、ロールを付与する方法をご覧ください。 -
サービス アカウントを作成します。
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
SERVICE_ACCOUNT_NAMEをサービス アカウントの名前に置き換えます。 -
サービス アカウントに
roles/workflows.invokerIAM ロールを付与します。gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/workflows.invoker
以下を置き換えます。
SERVICE_ACCOUNT_NAME: サービス アカウントの名前PROJECT_ID: サービス アカウントを作成したプロジェクト ID
-
サービス アカウント作成者 IAM ロール
(
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
プロジェクトを作成または選択します Google Cloud 。
プロジェクトを選択または作成するために必要なロール
- プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトを選択できます。
-
プロジェクトを作成する: プロジェクトを作成するには、プロジェクト作成者ロール
(
roles/resourcemanager.projectCreator)が必要です。これにはresourcemanager.projects.create権限が含まれています。詳しくは、ロールを付与する方法をご覧ください。
-
プロジェクトを作成します。 Google Cloud
gcloud projects create PROJECT_ID
PROJECT_IDは、作成する Google Cloud プロジェクトの名前に置き換えます。 -
作成した Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_IDは、 Google Cloud プロジェクトの名前に置き換えます。
Workflow Executions API と Workflows API を有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限が付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法をご覧ください。gcloud services enable workflowexecutions.googleapis.com
workflows.googleapis.com -
認証を設定します。
-
サービス アカウント作成者 IAM ロール
(
roles/iam.serviceAccountCreator)とプロジェクト IAM 管理者ロール (roles/resourcemanager.projectIamAdmin)があることを確認します。詳しくは、ロールを付与する方法をご覧ください。 -
サービス アカウントを作成します。
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
SERVICE_ACCOUNT_NAMEをサービス アカウントの名前に置き換えます。 -
サービス アカウントに
roles/workflows.invokerIAM ロールを付与します。gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/workflows.invoker
以下を置き換えます。
SERVICE_ACCOUNT_NAME: サービス アカウントの名前PROJECT_ID: サービス アカウントを作成したプロジェクト ID
-
サービス アカウント作成者 IAM ロール
(
子ワークフローを作成してデプロイする
子ワークフローは、親ワークフローからデータを受け取って処理できます。子ワークフローは、次の処理を行うことでこれを示します。
- 整数を引数として受け取る
- 一部の処理をシミュレートするために 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 つのイテレーションを並列ブランチで実行し、子ワークフローの実行ごとに成功または失敗のインジケーターを返すワークフローを作成してデプロイしました。
クリーンアップ
このチュートリアル用に新規プロジェクトを作成した場合は、そのプロジェクトを削除します。既存のプロジェクトを使用し、このチュートリアルで変更を加えずに残す場合は、チュートリアル用に作成したリソースを削除します。
プロジェクトの削除
課金されないようにする最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- コンソールで [**リソースの管理**] ページに移動します。 Google Cloud
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、 [Shut down] をクリックしてプロジェクトを削除します。
チュートリアル リソースの削除
このチュートリアルで作成したワークフローを削除します。
gcloud workflows delete workflow-child gcloud workflows delete workflow-parent
次のステップ
- ワークフローの構文の詳細については、ワークフローの構文のリファレンスをご覧ください。
- Workflows コネクタの詳細については、コネクタについてをご覧ください。