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.
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.yaml
Ouvrez 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_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 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
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. 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.yaml
Ouvrez 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_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 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 devraient ressembler à ce qui suit, indiquant des erreurs pour les itérations 2 et 4, et des réussites pour 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 ressembler à ce qui suit, indiquant des erreurs pour les itérations 2 et 4, et des réussites pour 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.