Ce tutoriel explique comment utiliser Cloud Scheduler pour exécuter automatiquement Workflows afin qu'un workflow s'exécute selon une planification spécifique, dans ce cas toutes les cinq minutes.
Objectifs
- Créer et déployer un workflow pouvant recevoir des arguments d'exécution
- Créer une tâche Cloud Scheduler qui déclenche votre workflow et l'exécute toutes les cinq minutes, en transmettant des arguments JSON au format approprié
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
- Configurez votre environnement pour Cloud Scheduler, y compris en créant une application App Engine.
-
Enable the Workflows API.
- Définissez l'emplacement par défaut utilisé dans ce tutoriel :
Remplacezgcloud config set workflows/location REGION
REGION
par l'emplacement Workflows compatible de votre choix. - Créez un compte de service à utiliser avec Workflows. Exemple :
sa-name
.gcloud iam service-accounts create sa-name
- Attribuez le rôle
workflows.invoker
à votre compte de service afin qu'il soit autorisé à déclencher votre workflow :gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:sa-name@PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/workflows.invoker"
Remplacez - Attribuez le rôle
logging.logWriter
au compte de service.gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:sa-name@PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/logging.logWriter"
PROJECT_ID
par l'ID de votre projet Google Cloud.
Créer un workflow qui reçoit des arguments d'exécution
Une définition de workflow est constituée d'une série d'étapes décrites à l'aide de la syntaxe Workflows, qui peut être écrite au format YAML ou JSON. Après avoir créé un workflow, vous pouvez le déployer pour le rendre disponible en exécution.
Console
Dans Google Cloud Console, accédez à la page Workflows :
Cliquez sur Create (Créer).
Saisissez
myFirstWorkflow
comme nom pour votre nouveau workflow.Sélectionnez us-central1 pour la région.
Sélectionnez le compte de service que vous avez créé précédemment.
Cliquez sur Next (Suivant).
Dans l'éditeur de workflow, saisissez la définition suivante pour votre workflow.
YAML
main: params: [args] steps: - step1: assign: - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"} - step2: return: ${outputVar}
JSON
{ "main": { "params": [ "args" ], "steps": [ { "step1": { "assign": [ { "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}" } ] } }, { "step2": { "return": "${outputVar}" } } ] } }
Ce workflow renvoie un message d'accueil "Hello" à une personne dont vous transmettez le prénom et le nom en tant qu'arguments d'exécution.
Cliquez sur Déployer.
gcloud
- Ouvrez un terminal.
Enregistrez la définition de workflow suivante sous forme de fichier YAML ou JSON, tel que myFirstWorkflow.yaml ou myFirstWorkflow.json.
YAML
main: params: [args] steps: - step1: assign: - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"} - step2: return: ${outputVar}
JSON
{ "main": { "params": [ "args" ], "steps": [ { "step1": { "assign": [ { "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}" } ] } }, { "step2": { "return": "${outputVar}" } } ] } }
Ce workflow renvoie un message d'accueil "Hello" à une personne dont vous transmettez le prénom et le nom en tant qu'arguments d'exécution.
Déployez le workflow en saisissant la commande suivante :
gcloud workflows deploy myFirstWorkflow \ --source=myFirstWorkflow.yaml_OR_json \ --service-account=sa-name@PROJECT_ID.iam.gserviceaccount.com
Remplacez
yaml_OR_json
paryaml
oujson
en fonction du format du fichier de définition Workflows que vous avez créé précédemment.
Planifier le workflow
Créez une tâche Cloud Scheduler qui déclenche votre workflow à l'aide du compte de service que vous avez créé précédemment.
Console
Dans la console Google Cloud, accédez à la page Cloud Scheduler:
Cliquez sur Créer une tâche.
Dans le champ Nom, spécifiez
my-workflow-job
.Pour Fréquence, saisissez :
La tâche sera exécutée toutes les cinq minutes. L'intervalle est défini au format unix-cron.*/5 * * * *
Pour Fuseau horaire, sélectionnez un pays et un fuseau horaire.
Par exemple, sélectionnez États-Unis et Los Angeles ou Heure avancée du Pacifique (PDT).
Cliquez sur Continuer.
Pour Type de cible, sélectionnez HTTP.
Pour URL, saisissez :
https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions
Laissez la valeur par défaut POST pour la méthode HTTP.
Ajoutez les deux en-têtes HTTP suivants :
- Nom :
Content-Type
et Valeur :application/octet-stream
- Nom :
User-Agent
et Valeur :Google-Cloud-Scheduler
- Nom :
Pour Corps, saisissez :
{"argument": "{\"firstName\":\"Sherlock\", \"lastName\":\"Holmes\"}"}
Cela a pour effet de transmettre un encodage JSON des arguments du workflow : dans ce cas, le prénom, "Sherlock", et le nom de famille, "Holmes". Les guillemets doubles dans la chaîne sont échappés à l'aide de barres obliques inverses (\).
Pour En-tête de l'authentification, sélectionnez Ajouter un jeton OAuth.
Saisissez le compte de service que vous avez créé précédemment.
Vous n'avez pas besoin de spécifier le champ d'application, car la valeur par défaut desa-name@PROJECT_ID.iam.gserviceaccount.com
https://www.googleapis.com/auth/cloud-platform
est utilisée.Acceptez tous les autres paramètres par défaut et cliquez sur Créer.
gcloud
Planifiez une tâche appelée my-workflow-job
en saisissant la commande suivante :
gcloud scheduler jobs create http my-workflow-job \ --schedule="*/5 * * * *" \ --uri="https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions" \ --message-body="{\"argument\": \"{\\\"firstName\\\":\\\"Sherlock\\\", \\\"lastName\\\":\\\"Holmes\\\"}\"}" \ --time-zone="America/Los_Angeles" \ --oauth-service-account-email="sa-name@PROJECT_ID.iam.gserviceaccount.com"
L'intervalle est défini au format unix-cron.
L'option message-body
permet de transmettre un encodage JSON des arguments du workflow : dans ce cas, le prénom, "Sherlock", et le nom de famille, "Holmes". Les guillemets doubles dans la chaîne sont échappés à l'aide de barres obliques inverses (\).
Votre workflow s'exécute désormais toutes les cinq minutes.
Pour en savoir plus sur les options gcloud scheduler
et découvrir comment appliquer la journalisation des appels afin que chaque étape d'appel lors de l'exécution de votre workflow soit journalisée, consultez Planifier un workflow et la documentation de référence sur gcloud
.
Exécuter la tâche et vérifier les résultats
Console
Dans la console Google Cloud, accédez à la page Cloud Scheduler:
Si la tâche ne s'affiche pas, vous devrez peut-être actualiser la page.
Pour la tâche nommée
my-workflow-job
, cliquez sur Exécuter maintenant.La valeur Résultat doit maintenant passer à Opération réussie.
Dans Google Cloud Console, accédez à la page Workflows :
Dans la liste des workflows, cliquez sur myFirstWorkflow pour ouvrir sa page d'informations.
L'état d'exécution de votre workflow doit être Réussite.
Cliquez sur l'ID d'exécution du workflow pour ouvrir la page de détails et afficher les résultats du workflow dans le volet de résultat.
Le résultat doit être "Hello, Sherlock Holmes!".
gcloud
Exécutez la tâche Cloud Scheduler pour exécuter le workflow :
gcloud scheduler jobs run my-workflow-job
Récupérez l'ID d'exécution de votre workflow :
gcloud workflows executions list myFirstWorkflow
Le résultat doit se présenter comme suit avec l'ID d'exécution en gras :
projects/316710615161/locations/us-central1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320
Récupérez les résultats de l'exécution du workflow :
gcloud workflows executions describe EXECUTION_ID --workflow myFirstWorkflow
Remplacez
EXECUTION_ID
par l'ID d'exécution renvoyé à l'étape précédente.La sortie doit ressembler à ceci :
argument: '{"firstName":"Sherlock","lastName":"Holmes"}' endTime: '2021-09-09T15:15:00.869350639Z' name: projects/316710615161/locations/us-central1/workflows/myFirstWorkflow/executions/138b31e1-f3bb-4ba7-a6da-008d0cb4a320 result: '"Hello, Sherlock Holmes!"' startTime: '2021-09-09T15:15:00.839175480Z' state: SUCCEEDED workflowRevisionId: 000001-4f9
Félicitations ! Vous avez créé une tâche Cloud Scheduler qui exécute automatiquement un workflow selon une planification spécifique.
Effectuer un nettoyage
Une fois le tutoriel terminé, vous pouvez procéder au nettoyage des ressources que vous avez créées afin qu'elles ne soient plus comptabilisées dans votre quota et qu'elles ne vous soient plus facturées. Dans les sections suivantes, nous allons voir comment supprimer ou désactiver ces ressources.
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 :
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Supprimer la tâche Cloud Scheduler
Accédez à la page Cloud Scheduler dans la console Google Cloud.
Cochez la case située en regard de votre tâche.
Cliquez sur le bouton Supprimer en haut de la page et confirmez la suppression.
Supprimer le workflow Workflows
Accédez à la page Workflows (Workflows) dans la console Google Cloud.
Sélectionnez votre workflow.
Cliquez sur Supprimer en haut de la page, saisissez le nom de votre workflow et confirmez la suppression.
Désactiver l'application App Engine
La désactivation d'une application App Engine l'empêche d'exécuter des instances et de diffuser des requêtes, tout en conservant les données et les paramètres de l'application.
Accédez à la page Paramètres de l'application dans la console Google Cloud.
Cliquez sur Disable application (Désactiver l'application).
Suivez les invites.
Étape suivante
- Apprenez-en davantage sur Workflows.