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 :
- Utilisez Workflows pour créer et déployer un workflow qui décode et renvoie des messages Pub/Sub.
- Créez un déclencheur Eventarc qui connecte un sujet Pub/Sub à un récepteur d'événements Workflows.
- 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.
- 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.
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
- Mettez à jour les composants gcloud :
gcloud components update
- 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
- 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}
-
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 :
-
Administrateur Eventarc (
roles/eventarc.admin
) -
Accesseur de vues de journaux (
roles/logging.viewAccessor
) -
Administrateur de projet IAM (
roles/resourcemanager.projectIamAdmin
) -
Diffuseur Pub/Sub (
roles/pubsub.publisher
) -
Administrateur de compte de service (
roles/iam.serviceAccountAdmin
) -
Utilisateur du compte de service (
roles/iam.serviceAccountUser
) -
Administrateur Service Usage (
roles/serviceusage.serviceUsageAdmin
) -
Administrateur de workflows (
roles/workflows.admin
)
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.
-
Administrateur Eventarc (
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.
- 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
- 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.
- Ouvrez un terminal ou Cloud Shell.
- Dans votre répertoire d'accueil, créez un fichier appelé
myFirstWorkflow.yaml
oumyFirstWorkflow.json
. - 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}" } } ] } }
- Déployez le workflow :
Remplacezexport MY_WORKFLOW=myFirstWorkflow gcloud workflows deploy ${MY_WORKFLOW} --source=myFirstWorkflow.yaml
.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.
- 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.
- 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.
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)'))
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".
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.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
Vérifiez que la valeur
publish_time
à laquelle le message Pub/Sub a été publié et la valeurstartTime
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
- Supprimez le workflow que vous avez créé :
Lorsque vous êtes invité à poursuivre l'opération, saisissezgcloud workflows delete ${MY_WORKFLOW}
y
. - Supprimez le déclencheur que vous avez créé :
gcloud eventarc triggers delete events-pubsub-trigger
- 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