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 diffusé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 des 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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Install the Google Cloud CLI.
  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  9. Make sure that billing is enabled for your Google Cloud project.

  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 guide de démarrage rapide, 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 page Gérer l'accès aux projets, aux dossiers et aux organisations.

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

  14. Notez le compte de service Compute Engine par défaut, car vous allez l'associer à un déclencheur Eventarc pour représenter l'identité du déclencheur à des fins de test. Ce compte de service est créé automatiquement après l'activation ou l'utilisation d'un service Google Cloud qui utilise Compute Engine, avec le format d'adresse e-mail suivant :

    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)'

    Pour les environnements de production, nous vous recommandons vivement de créer un compte de service et de lui attribuer un ou plusieurs rôles IAM contenant les autorisations minimales requises conformément au principe du moindre privilège.

  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 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 sur 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 votre ID d'exécution pour l'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 la valeur publish_time à laquelle le message Pub/Sub a été publié et la valeur 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.

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

Étapes suivantes