Déclencher des workflows à l'aide de messages Pub/Sub (gcloud CLI)

Ce guide de démarrage rapide explique comment exécuter un workflow à l'aide d'un déclencheur Eventarc qui reçoit des événements à l'aide de Pub/Sub. Le déclencheur exécute le workflow en transmettant les événements distribués via Pub/Sub en tant qu'arguments d'exécution à un workflow de destination.

Dans ce guide, vous allez :

  1. Utilisez Workflows pour créer et déployer un workflow qui décode et renvoie les messages Pub/Sub.
  2. Créez un déclencheur Eventarc qui connecte un sujet Pub/Sub à un récepteur d'événements Workflows.
  3. Envoyer un message au sujet Pub/Sub pour générer un événement. Cet événement est transmis en tant qu'argument d'exécution au workflow de destination.
  4. Affichez le message Pub/Sub suite à l'exécution du workflow.

Avant de commencer

Assurez-vous d'avoir accès à cette fonctionnalité en demandant d'ajouter votre projet aux aperçus privés de Google Cloud Workflows.

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Installez Google Cloud CLI.
  3. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  4. Créez ou sélectionnez un projet Google Cloud.

    • Créez un projet Google Cloud :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud.

  5. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  6. Installez Google Cloud CLI.
  7. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  8. Créez ou sélectionnez un projet Google Cloud.

    • Créez un projet Google Cloud :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud.

  9. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  10. Mettez à jour les composants gcloud :
    gcloud components update
  11. Activez les API Compute Engine, Eventarc, Pub/Sub et Workflows.
    gcloud services enable \
    compute.googleapis.com \
    eventarc.googleapis.com \
    pubsub.googleapis.com \
    workflows.googleapis.com \
    workflowexecutions.googleapis.com
  12. Définissez les variables de configuration utilisées dans ce tutoriel :
    export WORKFLOW_LOCATION=us-central1
    export TRIGGER_LOCATION=us-central1
    export PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    gcloud config set workflows/location ${WORKFLOW_LOCATION}
    gcloud config set eventarc/location ${TRIGGER_LOCATION}
    
  13. Si vous êtes le créateur du projet, vous disposez du rôle de base Propriétaire (roles/owner). Par défaut, ce rôle Identity and Access Management (IAM) inclut les autorisations nécessaires pour accéder à la plupart des ressources Google Cloud. Vous pouvez ignorer cette étape.

    Si vous n'êtes pas le créateur du projet, les autorisations requises doivent être accordées au compte principal approprié sur le projet. Par exemple, un compte principal peut être un compte Google (pour les utilisateurs finaux) ou un compte de service (pour les applications et les charges de travail de calcul). Pour en savoir plus, consultez la page Rôles et autorisations pour la destination de votre événement.

    Autorisations requises

    Pour obtenir les autorisations nécessaires pour suivre ce tutoriel, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :

    Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

    Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.

  14. Le compte de service Compute Engine par défaut est créé automatiquement après l'activation ou l'utilisation d'un service Google Cloud utilisant Compute Engine.

    À des fins de test, vous pouvez associer ce compte de service à un déclencheur Eventarc pour représenter l'identité du déclencheur. Notez le format de l'adresse e-mail à utiliser lors de la création d'un déclencheur :

    PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    Remplacez PROJECT_NUMBER par votre numéro de projet Google Cloud. Vous pouvez trouver le numéro de votre projet sur la page Bienvenue de la console Google Cloud ou en exécutant la commande suivante :

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

    Le compte de service Compute Engine dispose automatiquement du rôle de base Éditeur (roles/editor) sur votre projet. Toutefois, si les attributions automatiques de rôles ont été désactivées, consultez les instructions Rôles et autorisations applicables pour créer un compte de service et lui accorder les rôles requis.

  15. Attribuez le rôle Demandeur de workflows (roles/workflows.invoker) sur le projet au compte de service Compute Engine par défaut afin que ce compte soit autorisé à déclencher l'exécution de votre workflow.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/workflows.invoker
  16. Si vous avez activé l'agent de service Cloud Pub/Sub le 8 avril 2021 ou à une date antérieure, attribuez le rôle Créateur de jetons du compte de service (roles/iam.serviceAccountTokenCreator) au compte de service géré par Google pour accepter les requêtes push Pub/Sub authentifiées. Sinon, ce rôle est attribué par défaut :
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator

Créer et déployer un workflow

Créez et déployez un workflow qui est exécuté lorsqu'un message publié dans un sujet Pub/Sub déclenche un workflow avec une requête HTTP.

  1. Ouvrez un terminal ou Cloud Shell.
  2. Dans votre répertoire d'accueil, créez un fichier appelé myFirstWorkflow.yaml ou myFirstWorkflow.json.
  3. Copiez ce qui suit et collez-le dans le nouveau fichier, puis enregistrez-le :

    YAML

    main:
      params: [event]
      steps:
        - decode_pubsub_message:
            assign:
               - base64: ${base64.decode(event.data.message.data)}
               - message: ${text.decode(base64)}
        - return_pubsub_message:
            return: ${message}

    JSON

    {
      "main": {
        "params": [
          "event"
        ],
        "steps": [
          {
            "decode_pubsub_message": {
              "assign": [
                {
                  "base64": "${base64.decode(event.data.message.data)}"
                },
                {
                  "message": "${text.decode(base64)}"
                }
              ]
            }
          },
          {
            "return_pubsub_message": {
              "return": "${message}"
            }
          }
        ]
      }
    }
  4. Déployez le workflow :
    export MY_WORKFLOW=myFirstWorkflow
    gcloud workflows deploy ${MY_WORKFLOW} --source=myFirstWorkflow.yaml
    
    Remplacez .yaml par .json si vous avez copié la version JSON de l'exemple de workflow.

Créer un déclencheur Eventarc

Lorsqu'un message est publié dans le sujet Pub/Sub, l'événement déclenche le workflow.

  1. Créez un déclencheur pour écouter les messages Pub/Sub :

    Nouveau sujet Pub/Sub

    gcloud eventarc triggers create events-pubsub-trigger \
        --destination-workflow=${MY_WORKFLOW} \
        --destination-workflow-location=${WORKFLOW_LOCATION} \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"

    Cela crée un sujet Pub/Sub et un déclencheur associé nommé events-pubsub-trigger.

    Sujet Pub/Sub existant

    gcloud eventarc triggers create events-pubsub-trigger \
        --destination-workflow=${MY_WORKFLOW} \
        --destination-workflow-location=${WORKFLOW_LOCATION} \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --transport-topic=TOPIC_ID

    Remplacez TOPIC_ID par l'ID du sujet Pub/Sub existant.

    Cela crée un déclencheur nommé events-pubsub-trigger pour un sujet Pub/Sub existant.

    Notez que lorsque vous créez un déclencheur Eventarc pour la première fois dans un projet Google Cloud, le provisionnement de l'agent de service Eventarc peut prendre quelques instants. Ce problème peut généralement être résolu en essayant à nouveau de créer le déclencheur. Pour en savoir plus, consultez Erreurs d'autorisation refusée.

  2. Vérifiez que le déclencheur a bien été créé :
    gcloud eventarc triggers describe events-pubsub-trigger --location=${TRIGGER_LOCATION}

    Le résultat doit ressembler à ce qui suit, indiquant l'heure de création et l'emplacement du déclencheur :

    createTime: '2021-10-14T15:15:43.872360951Z'
    [...]
    name: projects/PROJECT_ID/locations/us-central1/triggers/events-pubsub-trigger

Générer et afficher un événement

Publiez un message dans le sujet Pub/Sub pour générer un événement et déclencher le workflow. L'événement généré est transmis en tant qu'argument d'exécution au workflow qui renvoie le message Pub/Sub à la suite de l'exécution du workflow. Assurez-vous que la taille des événements que vous transmettez au workflow ne dépasse pas 512 Ko.

  1. Si vous avez créé un déclencheur pour un nouveau sujet Pub/Sub, recherchez et définissez le sujet Pub/Sub créé en tant que variable d'environnement :

    export TOPIC_ID=$(basename $(gcloud eventarc triggers describe events-pubsub-trigger --format='value(transport.pubsub.topic)'))
    
  2. Pour déclencher le workflow, envoyez un message au sujet Pub/Sub :

    gcloud pubsub topics publish $TOPIC_ID --message "Hello there"
    

    L'événement généré est transmis en tant qu'argument d'exécution au workflow qui renvoie un message "Hello there".

  3. Pour vérifier qu'une exécution de workflow a été déclenchée, répertoriez les cinq dernières exécutions :

    gcloud workflows executions list ${MY_WORKFLOW} --limit=5
    

    Le résultat doit ressembler à ce qui suit, une valeur NAME et l'état (STATE) SUCCEEDED doivent être affichés pour chaque exécution du workflow :

    NAME: projects/606789101455/locations/us-central1/workflows/myFirstWorkflow/executions/8c02b8f1-8836-4a6d-99d9-fc321eb9668f
    STATE: SUCCEEDED
    START_TIME: 2021-09-13T19:15:10.275677049Z
    END_TIME: 2021-09-13T19:15:10.963136883Z
    NAME: projects/606789101455/locations/us-central1/workflows/myFirstWorkflow/executions/a6319d9d-36a6-4117-904e-3d1118bdc90a
    STATE: SUCCEEDED
    START_TIME: 2021-09-13T17:28:51.492864252Z
    END_TIME: 2021-09-13T17:28:52.227212414Z
    

    Notez que dans le champ NAME de l'exemple précédent, a6319d9d-36a6-4117-904e-3d1118bdc90a correspond à l'ID d'exécution du workflow. Copiez l'ID d'exécution à utiliser à l'étape suivante.

  4. Pour afficher l'état d'exécution, exécutez la commande suivante :

    gcloud workflows executions describe WORKFLOW_EXECUTION_ID --workflow=${MY_WORKFLOW}
    

    Remplacez WORKFLOW_EXECUTION_ID par l'ID d'exécution du workflow correspondant à l'heure de publication du sujet Pub/Sub. Le résultat ressemble à ce qui suit :

    argument: [...]
    endTime: '2021-09-13T17:28:47.301012152Z'
    name: projects/1234567/locations/us-central1/workflows/myFirstWorkflow/executions/f72bc6d4-5ea0-4dfb-bb14-2dae82303120
    result: 'Hello there'
    startTime: '2021-09-13T17:28:51.492864252Z'
    state: SUCCEEDED
  5. Vérifiez que le publish_time sur lequel le message Pub/Sub a été publié et le startTime de l'exécution du workflow correspondent.

Félicitations, vous avez généré un événement à l'aide d'un sujet Pub/Sub qui a déclenché un récepteur d'événements Workflows à l'aide d'Eventarc.

Effectuer un nettoyage

  1. Supprimez le workflow que vous avez créé :
    gcloud workflows delete ${MY_WORKFLOW}
    Lorsque vous êtes invité à poursuivre l'opération, saisissez y.
  2. Supprimez le déclencheur que vous avez créé :
    gcloud eventarc triggers delete events-pubsub-trigger
  3. Vous pouvez également supprimer votre projet Google Cloud pour éviter des frais. La suppression de votre projet Google Cloud arrête la facturation de toutes les ressources utilisées dans ce projet.

    Supprimez un projet Google Cloud :

    gcloud projects delete PROJECT_ID

Étapes suivantes