Ce tutoriel vous explique comment créer et exécuter un workflow parent qui exécute plusieurs workflows enfants en parallèle.
Dans le diagramme suivant, quatre exécutions parallèles du workflow enfant sont appelées. Cela permet au workflow parent de traiter les données dans des branches parallèles et de réduire le temps d'exécution global. Le workflow parent attend la fin de toutes les exécutions de workflows enfants avant de renvoyer un récapitulatif des exécutions réussies et ayant échoué, ce qui simplifie la détection des erreurs.
Objectifs
Au cours de ce tutoriel, vous allez :
- Créer et déployer un workflow enfant qui reçoit des données d'un workflow parent
- Créez et déployez un workflow parent qui exécute plusieurs workflows enfants à l'aide d'une boucle
forparallèle. - Exécutez le workflow parent qui appelle les exécutions parallèles du workflow enfant.
- Les résultats de toutes les exécutions de workflows enfants réussies et ayant échoué sont stockés et renvoyés dans un mappage.
Vous pouvez exécuter les commandes suivantes dans la console Google Cloud ou à l'aide de la Google Cloud CLI dans votre terminal ou Cloud Shell.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Pour obtenir une estimation des coûts en fonction de votre utilisation prévue, utilisez le simulateur de coût.
Avant de commencer
Les contraintes de sécurité définies par votre organisation peuvent vous empêcher d'effectuer les étapes suivantes. Pour en savoir plus sur la résolution de ce problème, consultez Développer des applications dans un environnement Google Cloud limité.
Console
-
Connectez-vous à votre compte Google.
Si vous n'en possédez pas déjà un, vous devez en créer un.
-
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 Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. 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 Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. 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
-
Connectez-vous à votre compte Google.
Si vous n'en possédez pas déjà un, vous devez en créer un.
-
Installez la Google Cloud CLI.
-
Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
-
Pour initialiser la gcloud CLI, exécutez la commande suivante :
gcloud init -
Créez ou sélectionnez un projet Google Cloud .
Rôles requis pour sélectionner ou créer un projet
- Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
-
Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (
roles/resourcemanager.projectCreator), qui contient l'autorisationresourcemanager.projects.create. Découvrez comment attribuer des rôles.
-
Créez un projet Google Cloud :
gcloud projects create PROJECT_ID
Remplacez
PROJECT_IDpar le nom du projet Google Cloud que vous créez. -
Sélectionnez le projet Google Cloud que vous avez créé :
gcloud config set project PROJECT_ID
Remplacez
PROJECT_IDpar le nom de votre projet Google Cloud .
-
Vérifiez que la facturation est activée pour votre projet Google Cloud .
Activez les API Workflow Executions et Workflows :
Rôles requis pour activer les API
Pour activer les API, vous avez besoin du rôle IAM Administrateur Service Usage (
roles/serviceusage.serviceUsageAdmin), qui contient l'autorisationserviceusage.services.enable. Découvrez comment attribuer des rôles.gcloud services enable workflowexecutions.googleapis.com
workflows.googleapis.com -
Configurez l'authentification :
-
Assurez-vous de disposer des rôles IAM "Créateur de compte de service" (
roles/iam.serviceAccountCreator) et "Administrateur IAM du projet" (roles/resourcemanager.projectIamAdmin). Découvrez comment attribuer des rôles. -
Créez le compte de service :
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Remplacez
SERVICE_ACCOUNT_NAMEpar le nom que vous souhaitez donner au compte de service. -
Attribuez le rôle IAM
roles/workflows.invokerau compte de service.gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/workflows.invoker
Remplacez les éléments suivants :
SERVICE_ACCOUNT_NAME: nom du compte de service.PROJECT_ID: ID du projet dans lequel vous avez créé le compte de service.
-
Assurez-vous de disposer des rôles IAM "Créateur de compte de service" (
-
Installez la Google Cloud CLI.
-
Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
-
Pour initialiser la gcloud CLI, exécutez la commande suivante :
gcloud init -
Créez ou sélectionnez un projet Google Cloud .
Rôles requis pour sélectionner ou créer un projet
- Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
-
Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (
roles/resourcemanager.projectCreator), qui contient l'autorisationresourcemanager.projects.create. Découvrez comment attribuer des rôles.
-
Créez un projet Google Cloud :
gcloud projects create PROJECT_ID
Remplacez
PROJECT_IDpar le nom du projet Google Cloud que vous créez. -
Sélectionnez le projet Google Cloud que vous avez créé :
gcloud config set project PROJECT_ID
Remplacez
PROJECT_IDpar le nom de votre projet Google Cloud .
-
Vérifiez que la facturation est activée pour votre projet Google Cloud .
Activez les API Workflow Executions et Workflows :
Rôles requis pour activer les API
Pour activer les API, vous avez besoin du rôle IAM Administrateur Service Usage (
roles/serviceusage.serviceUsageAdmin), qui contient l'autorisationserviceusage.services.enable. Découvrez comment attribuer des rôles.gcloud services enable workflowexecutions.googleapis.com
workflows.googleapis.com -
Configurez l'authentification :
-
Assurez-vous de disposer des rôles IAM "Créateur de compte de service" (
roles/iam.serviceAccountCreator) et "Administrateur IAM du projet" (roles/resourcemanager.projectIamAdmin). Découvrez comment attribuer des rôles. -
Créez le compte de service :
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Remplacez
SERVICE_ACCOUNT_NAMEpar le nom que vous souhaitez donner au compte de service. -
Attribuez le rôle IAM
roles/workflows.invokerau compte de service.gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/workflows.invoker
Remplacez les éléments suivants :
SERVICE_ACCOUNT_NAME: nom du compte de service.PROJECT_ID: ID du projet dans lequel vous avez créé le compte de service.
-
Assurez-vous de disposer des rôles IAM "Créateur de compte de service" (
Créer et déployer un workflow enfant
Un workflow enfant peut recevoir et traiter des données provenant d'un workflow parent. Le workflow enfant le démontre en effectuant les opérations suivantes :
- Reçoit un entier comme argument
- Active la veille pendant 10 secondes pour simuler un traitement
Renvoie un indicateur (selon que le nombre entier est pair ou impair) pour simuler la réussite ou l'échec de l'exécution du workflow.
Console
Dans la console Google Cloud , accédez à la page Workflows.
Cliquez sur Créer.
Saisissez le nom du nouveau workflow,
workflow-child.Dans la liste Région, sélectionnez us-central1.
Sélectionnez le compte de service que vous avez créé précédemment.
Cliquez sur Suivant.
Dans l'éditeur de workflow, saisissez la définition suivante pour votre workflow :
Cliquez sur Déployer.
gcloud
Créez un fichier de code source pour votre workflow :
touch workflow-child.yamlOuvrez votre fichier de code source dans un éditeur de texte et copiez-y le workflow suivant.
Déployez le workflow :
gcloud workflows deploy workflow-child \ --source=workflow-child.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Remplacez
SERVICE_ACCOUNT_NAMEpar le nom du compte de service que vous avez créé précédemment.
Créer et déployer le workflow parent
Le workflow parent exécute plusieurs branches du workflow enfant à l'aide d'une boucle for parallèle.
Copiez le code source de la définition du workflow. Il se compose des parties suivantes :
Une carte est utilisée pour stocker les résultats des exécutions du workflow enfant. Pour en savoir plus, consultez Maps.
Une boucle
forest exécutée en parallèle pour appeler le workflow enfant. Pour en savoir plus, consultez Étapes parallèles et Itération.Le workflow enfant est appelé à l'aide d'un connecteur. Chaque itération du workflow enfant reçoit l'argument
iteration. Le workflow parent attend et stocke le résultat de chaque exécution de workflow enfant. Pour en savoir plus, consultez Connecteur de l'API Workflows Executions et Arguments d'exécution.Les résultats de l'exécution sont renvoyés. Pour en savoir plus, consultez Terminer l'exécution d'un workflow.
Déployez le workflow :
Console
Dans la console Google Cloud , accédez à la page Workflows :
Cliquez sur Créer.
Saisissez le nom du nouveau workflow,
workflow-parent.Dans la liste Région, sélectionnez us-central1.
Sélectionnez le compte de service que vous avez créé précédemment.
Cliquez sur Suivant.
Dans l'éditeur de workflow, collez la définition du workflow parent.
Cliquez sur Déployer.
gcloud
Créez un fichier de code source pour votre workflow :
touch workflow-parent.yamlOuvrez votre fichier de code source dans un éditeur de texte et collez la définition du workflow parent.
Déployez le workflow :
gcloud workflows deploy workflow-parent \ --source=workflow-parent.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Remplacez
SERVICE_ACCOUNT_NAMEpar le nom du compte de service que vous avez créé précédemment.
Exécuter le workflow parent
Exécutez le workflow parent pour que les appels du workflow enfant s'exécutent en parallèle. L'exécution devrait prendre environ 10 secondes.
Console
Dans la console Google Cloud , accédez à la page Workflows :
Sur la page Workflows, cliquez sur le workflow workflow-parent pour accéder à sa page d'informations.
Sur la page Détails du workflow, cliquez sur play_arrow Exécuter.
Cliquez à nouveau sur Exécuter.
Affichez les résultats du workflow dans le volet Output (Résultat).
Les résultats doivent ressembler à ce qui suit, indiquant des erreurs avec les itérations 2 et 4, et des réussites avec les itérations 1 et 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
Exécutez le workflow :
gcloud workflows run workflow-parent \ --location=us-central1
Les résultats doivent ressembler à ce qui suit, indiquant des erreurs avec les itérations 2 et 4, et des réussites avec les itérations 1 et 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
Vous avez créé et déployé un workflow qui appelle un workflow enfant, exécute quatre itérations du workflow enfant dans des branches parallèles et renvoie un indicateur de réussite ou d'échec pour chaque exécution du workflow enfant.
Effectuer un nettoyage
Si vous avez créé un projet pour ce tutoriel, supprimez-le. Si vous avez utilisé un projet existant et que vous souhaitez le conserver sans les modifications du présent tutoriel, supprimez les ressources créées pour ce tutoriel.
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.
Pour supprimer le projet :
- Dans la console Google Cloud , accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
Supprimer les ressources du tutoriel
Supprimez les workflows créés dans ce tutoriel :
gcloud workflows delete workflow-child gcloud workflows delete workflow-parent
Étapes suivantes
- Pour en savoir plus sur la syntaxe Workflows, consultez la documentation de référence sur la syntaxe Workflows.
- Pour en savoir plus sur les connecteurs Workflows, consultez l'article Comprendre les connecteurs.