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
Ce tutoriel utilise 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.
-
Activez l'API Workflows
- Définissez l'emplacement par défaut utilisé dans ce tutoriel :
gcloud config set workflows/location REGION
RemplacezREGION
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 les 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 Créer.
Saisissez
myFirstWorkflow
comme nom pour votre nouveau workflow.Sélectionnez la région us-central1.
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
.Dans le champ Fréquence, saisissez:
*/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.
Dans le champ 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 méthode HTTP par défaut (POST).
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.
sa-name@PROJECT_ID.iam.gserviceaccount.com
Vous n'avez pas besoin de spécifier le champ d'application, car la valeur par défaut dehttps://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 à l'aide du 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 pour savoir comment appliquer la journalisation des appels afin que chaque étape d'appel lors de l'exécution de votre workflow soit consignée, consultez la page Planifier un workflow et la documentation de référence 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 n'est pas affichée, 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 :
- 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 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 de workflow
Accédez à la page Workflows de 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 des applications dans la console Google Cloud.
Cliquez sur Disable application (Désactiver l'application).
Suivez les invites.
Étapes suivantes
- Apprenez-en davantage sur Workflows.