Planifier des workflows avec Cloud Scheduler

Ce tutoriel explique comment utiliser Cloud Scheduler pour exécuter automatiquement des workflows afin qu'un workflow s'exécute selon un calendrier particulier, 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éez 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 pour la création d'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 de Workflows compatible de votre choix.
  4. Créer un compte de service pour les workflows à utiliser Exemple : sa-name.
      gcloud iam service-accounts create sa-name
  5. Attribuez à votre compte de service le rôle workflows.invoker afin que le compte 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 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 mettre à disposition.

Console

  1. Dans Cloud 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 us-central1 pour la région.

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

  6. Cliquez sur Next (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 le prénom et le nom que vous transmettez sont des arguments d'exécution.

  8. Cliquez sur Déployer.

gcloud

  1. Ouvrez un terminal.
  2. Enregistrez la définition de workflow suivante en tant que 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 le prénom et le nom que vous transmettez sont des 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 selon le format du fichier de définition de 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 Cloud 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 s'exécute 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. Dans le champ URL, saisissez:

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

  9. Laissez la méthode HTTP définie par défaut sur POST.

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

    • Nom: Content-Type/Valeur: application/octet-stream
    • Nom: User-Agent/Valeur: Google-Cloud-Scheduler
  11. Dans le champ Corps, saisissez:

    {"argument": "{\"firstName\":\"Sherlock\", \"lastName\":\"Holmes\"}"}
    

    Cette opération transmet un encodage JSON des arguments du workflow. par exemple le prénom, "Sherlock" et le nom de famille "Holmes". Les guillemets doubles figurant dans la chaîne sont échappés à l'aide de barres obliques inverses (\).

  12. Dans la section En-tête Auth, 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 comme règle par défaut de https://www.googleapis.com/auth/cloud-platform.

  14. Acceptez tous les autres paramètres par défaut et cliquez sur Create (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 à l'intérieur de la chaîne sont échappés à l'aide de barres obliques inverses (\).

Votre workflow s'exécute désormais toutes les cinq minutes.

Pour plus d'informations sur les options gcloud scheduler, consultez la section 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 Cloud Console, accédez à la page Cloud Scheduler:

    Accéder à Cloud Scheduler

    Si le projet n'est pas affiché, vous devrez peut-être actualiser la page.

  2. Pour la tâche nommée my-workflow-job, cliquez sur Exécuter maintenant.

    La valeur Result (Résultat) devrait s'afficher sur Success (Opération réussie).

  3. Dans Cloud Console, accédez à la page Workflows.

    Accéder à "Workflows"

  4. Dans la liste des workflows, cliquez sur myFirstWorkflow pour ouvrir la page d'informations correspondante.

    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 d'informations et afficher les résultats du workflow dans le volet de sortie.

    Le résultat devrait ê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
    

    La sortie doit ressembler à ce qui 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 un calendrier 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 Cloud 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 dans Cloud Console.

    Accéder à Cloud Scheduler

  2. Cochez la case à côté de votre tâche.

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

Supprimer le workflow de Workflows

  1. Accédez à la page Workflows de Cloud Console.

    Accéder à "Workflows"

  2. Sélectionnez votre workflow.

  3. Cliquez sur Supprimer en haut de la page. Saisissez le nom de votre workflow, puis confirmez la suppression.

Désactiver l'application App Engine

La désactivation d'une application App Engine arrête votre application 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 Cloud Console.

    Accéder aux paramètres des applications

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

  3. Suivez les invites.

Étape suivante