Ce tutoriel explique comment créer et exécuter un workflow parent qui exécute plusieurs workflows enfants en parallèle.
Dans le schéma 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, ce qui réduit le temps d'exécution global. Le workflow parent attend la fin de toutes les exécutions du workflow enfant avant de renvoyer un résumé des exécutions ayant réussi et échoué, ce qui simplifie la détection des erreurs.
Objectifs
Au cours de ce tutoriel, vous allez :
- Créez et déployez 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
for
parallèle. - Exécuter le workflow parent qui appelle des exécutions parallèles du workflow enfant
- Les résultats de toutes les exécutions de workflow enfant ayant abouti ou ayant échoué sont stockés et renvoyés sous forme de 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 :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du 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 obtenir des informations de dépannage, consultez la page 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.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Activer les API Workflow Executions and Workflows.
-
Créez un compte de service :
-
Dans la console Google Cloud, accédez à la page Créer un compte de service.
Accéder à la page "Créer un compte de service" - Sélectionnez votre projet.
-
Dans le champ Nom du compte de service, saisissez un nom. La console Google Cloud remplit le champ ID du compte de service en fonction de ce nom.
Dans le champ Description du compte de service, saisissez une description. Exemple :
Service account for quickstart
. - Cliquez sur Créer et continuer.
-
Attribuez le rôle Workflows > Workflows Invoker au compte de service.
Pour accorder le rôle, trouvez la liste Sélectionner un rôle, puis sélectionnez Workflows > Workflows Invoker.
- Cliquez sur Continuer.
-
Cliquez sur OK pour terminer la création du compte de service.
-
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Activer les API Workflow Executions and Workflows.
-
Créez un compte de service :
-
Dans la console Google Cloud, accédez à la page Créer un compte de service.
Accéder à la page "Créer un compte de service" - Sélectionnez votre projet.
-
Dans le champ Nom du compte de service, saisissez un nom. La console Google Cloud remplit le champ ID du compte de service en fonction de ce nom.
Dans le champ Description du compte de service, saisissez une description. Exemple :
Service account for quickstart
. - Cliquez sur Créer et continuer.
-
Attribuez le rôle Workflows > Workflows Invoker au compte de service.
Pour accorder le rôle, trouvez la liste Sélectionner un rôle, puis sélectionnez Workflows > Workflows Invoker.
- Cliquez sur Continuer.
-
Cliquez sur OK pour terminer la création du compte de service.
-
gcloud
- Connectez-vous à votre compte Google.
Si vous n'en possédez pas déjà un, vous devez en créer un.
- Installez Google Cloud CLI.
-
Pour initialiser gcloudCLI, exécutez la commande suivante :
gcloud init
-
Créez ou sélectionnez un projet Google Cloud.
-
Créez un projet Google Cloud :
gcloud projects create PROJECT_ID
Remplacez
PROJECT_ID
par 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_ID
par le nom de votre projet Google Cloud.
-
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Activer les API Workflow Executions and Workflows :
gcloud services enable workflowexecutions.googleapis.com
workflows.googleapis.com -
Configurez l'authentification :
-
Créez le compte de service :
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Remplacez
SERVICE_ACCOUNT_NAME
par le nom que vous souhaitez donner au compte de service. -
Attribuez le rôle IAM
roles/workflows.invoker
au 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.
-
- Installez Google Cloud CLI.
-
Pour initialiser gcloudCLI, exécutez la commande suivante :
gcloud init
-
Créez ou sélectionnez un projet Google Cloud.
-
Créez un projet Google Cloud :
gcloud projects create PROJECT_ID
Remplacez
PROJECT_ID
par 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_ID
par le nom de votre projet Google Cloud.
-
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Activer les API Workflow Executions and Workflows :
gcloud services enable workflowexecutions.googleapis.com
workflows.googleapis.com -
Configurez l'authentification :
-
Créez le compte de service :
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Remplacez
SERVICE_ACCOUNT_NAME
par le nom que vous souhaitez donner au compte de service. -
Attribuez le rôle IAM
roles/workflows.invoker
au 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.
-
Créer et déployer un workflow enfant
Un workflow enfant peut recevoir et traiter des données d'un workflow parent. Le workflow enfant le démontre en procédant comme suit:
- Reçoit un entier en tant qu'argument
- Mise en veille pendant 10 secondes pour simuler un traitement
Renvoie un indicateur (selon que l'entier est un nombre 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 Deploy (Déployer).
gcloud
Créez un fichier de code source pour votre workflow:
touch workflow-child.yaml
Ouvrez le 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_NAME
par 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 pour la définition du workflow. Il se compose des éléments suivants:
Un mappage permet de stocker les résultats des exécutions du workflow enfant. Pour en savoir plus, consultez Maps.
Une boucle
for
est 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. L'argument
iteration
est transmis à chaque itération du workflow enfant. Le workflow parent attend et stocke le résultat de chaque exécution du workflow enfant. Pour en savoir plus, consultez les pages 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 la section 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 Deploy (Déployer).
gcloud
Créez un fichier de code source pour votre workflow:
touch workflow-parent.yaml
Ouvrez le fichier de code source dans un éditeur de texte, puis 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_NAME
par le nom du compte de service que vous avez créé précédemment.
Exécuter le workflow parent
Exécutez le workflow parent afin que les appels du workflow enfant s'exécutent en parallèle. Les exécutions devraient 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 devraient être semblables à ce qui suit, indiquant des erreurs avec les itérations 2 et 4, et un succès 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 devraient être semblables à ce qui suit, indiquant des erreurs avec les itérations 2 et 4, et un succès 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.