Planifier des workflows avec Cloud Scheduler

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

  1. Créer et déployer un workflow pouvant recevoir des arguments d'exécution
  2. 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. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Avant de commencer

  1. Configurez votre environnement pour Cloud Scheduler, y compris en créant une application App Engine.
  2. Activez l'API Workflows

    Activer l'API

  3. Définissez l'emplacement par défaut utilisé dans ce tutoriel :
      gcloud config set workflows/location REGION
    Remplacez REGION par l'emplacement Workflows compatible de votre choix.
  4. Créez un compte de service à utiliser avec Workflows. Exemple : sa-name.
      gcloud iam service-accounts create sa-name
  5. 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"
  6. Remplacez PROJECT_ID par l'ID de votre projet Google Cloud.
  7. 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"

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

  1. Dans la console, accédez à la page Workflows:

    Accéder à "Workflows"

  2. Cliquez sur Create (Créer).

  3. Saisissez myFirstWorkflow comme nom pour votre nouveau workflow.

  4. Sélectionnez la région us-central1.

  5. Sélectionnez le compte de service que vous avez créé précédemment.

  6. Cliquez sur Suivant.

  7. 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.

  8. Cliquez sur Déployer.

gcloud

  1. Ouvrez un terminal.
  2. 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.

  3. 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 par yaml ou json 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

  1. Dans la console, accédez à la page Cloud Scheduler:

    Accéder à Cloud Scheduler

  2. Cliquez sur Créer une tâche.

  3. Dans le champ Nom, spécifiez my-workflow-job.

  4. Dans le champ Fréquence, saisissez:

    */5 * * * *
    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).

  6. Cliquez sur Continuer.

  7. Dans le champ Type de cible, sélectionnez HTTP.

  8. Pour URL, saisissez :

    https://workflowexecutions.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/workflows/myFirstWorkflow/executions
    

  9. Laissez la méthode HTTP par défaut (POST).

  10. Ajoutez les deux en-têtes HTTP suivants :

    • Nom : Content-Type et Valeur : application/octet-stream
    • Nom : User-Agent et Valeur : Google-Cloud-Scheduler
  11. 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 (\).

  12. Pour En-tête de l'authentification, sélectionnez Ajouter un jeton OAuth.

  13. 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 de https://www.googleapis.com/auth/cloud-platform est utilisée.

  14. 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, consultez la page Planifier un workflow et la documentation de référence sur gcloud.

Exécuter la tâche et vérifier les résultats

Console

  1. Dans la console, accédez à la page Cloud Scheduler:

    Accéder à Cloud Scheduler

    Si la tâche ne s'affiche pas, vous devrez peut-être actualiser la page.

  2. 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.

  3. Dans la console, accédez à la page Workflows:

    Accéder à "Workflows"

  4. 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.

  5. 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

  1. Exécutez la tâche Cloud Scheduler pour exécuter le workflow :

    gcloud scheduler jobs run my-workflow-job
    
  2. 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
  3. 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 :

  1. Dans la console, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. 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

  1. Accédez à la page Cloud Scheduler de la console.

    Accéder à Cloud Scheduler

  2. Cochez la case située en regard de votre tâche.

  3. Cliquez sur le bouton Supprimer en haut de la page et confirmez la suppression.

Supprimer le workflow de Workflows

  1. Accédez à la page Workflows de la console.

    Accéder à "Workflows"

  2. Sélectionnez votre workflow.

  3. 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.

  1. Accédez à la page Paramètres des applications dans la console.

    Accéder à la page "Paramètres de l'application"

  2. Cliquez sur Disable application (Désactiver l'application).

  3. Suivez les invites.

Étapes suivantes