Votre workflow peut devoir attendre un processus externe. Vous pouvez utiliser Rappels HTTP à attendre un autre service pour envoyer une requête à un point de terminaison de rappel ; cette demande reprend l'exécution du workflow. Vous pouvez également attendre à l'aide de l'interrogation.
Au lieu d'utiliser la scrutation, ce tutoriel explique comment attendre des événements ou des messages Pub/Sub à l'aide de rappels HTTP et d'Eventarc déclencheurs. Bien que vous puissiez déclencher un workflow avec des événements ou des messages Pub/Sub ; vous pouvez interrompre cette exécution pour attendre un autre événement avant que continuer. Par exemple, un événement déclenche un workflow pour initier un processus, mais le workflow doit attendre un autre événement indiquant que le processus est en cours terminé. Pour ce faire, un workflow doit appeler un autre workflow.
Objectifs
Dans ce tutoriel, voici ce qui se produit:
Un workflow principal qui doit attendre les événements est déployé et exécuté. Comme il doit attendre que les événements se produisent, il stocke les détails de son rappel dans un base de données Firestore afin que le workflow secondaire puisse récupérer plus de détails. Le workflow principal attend ensuite les appels HTTP.
Un workflow secondaire est déclenché par les événements et récupère les détails du rappel à partir de la base de données Firestore lorsque les événements sont générés. Le workflow secondaire rappelle ensuite le workflow principal, reprend son exécution.
Voici un aperçu de l'ensemble du processus:
Workflow principal:
- Un workflow
callback-event-sample
crée des points de terminaison de rappel pour deux sources d'événements : un sujet Pub/Sub et un bucket Cloud Storage. - Ce workflow stocke les deux points de terminaison de rappel dans une instance document.
- Ce workflow interrompt son exécution et attend l'arrivée des requêtes HTTP les points de terminaison de rappel.
Événements :
- Des événements se produisent : un message est publié dans un sujet Pub/Sub et un fichier est importé dans un bucket Cloud Storage.
Workflow secondaire :
- Eventarc achemine les événements vers
callback-event-listener
et déclenche son exécution. - Ce workflow récupère les URL de point de terminaison de rappel appropriées à partir du document Firestore.
- Ce workflow exécute les rappels aux points de terminaison appropriés dans le exemple de workflow.
Workflow principal:
- Le workflow
callback-event-sample
reçoit les événements au niveau points de terminaison du rappel et reprend son exécution. - Ce workflow supprime les URL de rappel du document Firestore et termine son exécution.
Coûts
Dans ce document, vous utilisez 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.
Avant de commencer
Vous pouvez exécuter les commandes suivantes dans la console Google Cloud ou à l'aide de la Google Cloud CLI dans votre terminal ou Cloud Shell.
Les contraintes de sécurité définies par votre organisation peuvent vous empêcher d'effectuer les étapes suivantes. Pour obtenir des informations de dépannage, consultez la page Développer des applications dans un environnement Google Cloud limité.
Console
Dans la console Google Cloud, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
Activez les API App Engine, Eventarc, Firestore, Pub/Sub et Workflows.
Créez un compte de service que votre workflow utilisera pour l'authentification avec d'autres services Google Cloud et attribuez-lui les rôles appropriés:
Dans la console Google Cloud, accédez à la page Comptes de service.
Pour accéder à la page Créer un compte de service, sélectionnez votre projet.
Dans le champ Nom du compte de service, saisissez un nom. La console Google Cloud remplit le champ ID du compte de service en fonction de ce nom.
Dans le champ Description du compte de service, saisissez une description. Exemple :
Service account for tutorial
.Cliquez sur Créer et continuer.
Dans la liste Sélectionner un rôle, définissez un filtre sur les rôles suivants à accorder au compte de service géré par l'utilisateur que vous avez créé à l'étape précédente :
- Utilisateur Cloud Datastore: pour accéder à Firestore en mode Datastore (Datastore) données.
- Destinataire des événements Eventarc : pour recevoir des événements de fournisseurs d'événements.
- Rédacteur de journaux: pour écrire des journaux.
- Demandeur de workflows : permet d'exécuter des workflows et de gérer les exécutions.
Pour ajouter des rôles supplémentaires, cliquez sur
Ajouter un autre rôle et ajoutez chaque rôle supplémentaire.Cliquez sur Continuer.
Pour terminer la création du compte, cliquez sur OK.
Pour créer un déclencheur Eventarc qui achemine les événements Cloud Storage, attribuez le rôle "Diffuseur Pub/Sub" à l'agent de service Cloud Storage. Il s'agit généralement de
service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com
. Vous pouvez récupérer l'adresse e-mail pour l'agent de service Cloud Storage.Dans la console Google Cloud, accédez à la page IAM.
Sur la ligne de l'agent de service Cloud Storage, cliquez sur
Modifier le compte principal. (Si l'agent de service n'est pas répertorié, passez à l'étape suivante.) Le volet Modifier l'accès s'affiche.- Cliquez sur addAjouter un autre rôle, puis recherchez le rôle Diffuseur Pub/Sub.
- Sélectionnez le rôle.
- Cliquez sur Enregistrer.
Si l'agent de service n'est pas répertorié, cliquez sur
Accorder l'accès. Le volet Accorder l'accès s'affiche.- Dans le champ Nouveaux comptes principaux, saisissez l'adresse e-mail de l'agent de service.
- Dans la liste Sélectionner un rôle, recherchez le rôle Diffuseur Pub/Sub.
- Sélectionnez le rôle.
- Cliquez sur Enregistrer.
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
Activez les API App Engine, Eventarc Firestore, Pub/Sub et Workflows API.
gcloud services enable \ appengine.googleapis.com \ eventarc.googleapis.com \ firestore.googleapis.com \ pubsub.googleapis.com \ workflows.googleapis.com
Créez un compte de service à utiliser pour l'authentification avec d'autres services Google Cloud et accordez-lui les rôles appropriés.
Créez le compte de service :
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Remplacez
SERVICE_ACCOUNT_NAME
par le nom compte de service.Attribuez des rôles au compte de service géré par l'utilisateur que vous avez créé dans la à l'étape précédente. Exécutez la commande suivante une fois pour chacun des rôles IAM suivants :
roles/datastore.user
: pour accéder aux données Firestore en mode Datastore (Datastore).roles/eventarc.eventReceiver
: pour recevoir des événements de fournisseurs d'événements.roles/logging.logWriter
: permet d'écrire des journaux.roles/workflows.invoker
: pour exécuter des workflows et gérer les exécutions.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=ROLE
Remplacez les éléments suivants :
PROJECT_ID
: le ID du projet où vous avez créé le compte de serviceROLE
: rôle à accorder
Pour créer un déclencheur Eventarc qui achemine les événements à partir de Cloud Storage, attribuez le rôle Éditeur Pub/Sub à l'agent de service Cloud Storage. Il s'agit généralement de
service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com
. Utilisezgcloud storage service-agent
pour récupérer d'abord l'agent de service Cloud Storage.SERVICE_ACCOUNT_STORAGE="$(gcloud storage service-agent --project=PROJECT_ID)" gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$SERVICE_ACCOUNT_STORAGE \ --role=roles/pubsub.publisher
Créer une base de données Firestore
Firestore stocke vos données dans des documents contenant des champs mappés à des valeurs. Ces documents sont stockés dans des collections, qui sont des conteneurs pour vos documents que vous pouvez utiliser pour organiser vos données et créer des requêtes. En savoir plus sur Firestore
Notez que chaque projet Google Cloud est limité à un seul Firestore. base de données. Pour créer une base de données, procédez comme suit :
Console
Dans la console Google Cloud, accédez à Firestore Premiers pas.
Cliquez sur Sélectionner le mode natif.
Pour obtenir des conseils sur la sélection d'un mode de base de données et sur une fonctionnalité par fonctionnalité comparaison, voir choisir entre le mode natif et le mode Datastore.
Dans la liste Sélectionnez un emplacement, sélectionnez nam5 (États-Unis).
Cet emplacement s'applique à la base de données Firestore et à l'application App Engine de votre projet Google Cloud. Une fois votre base de données créée, vous ne pouvez plus modifier son emplacement.
Cliquez sur Créer une base de données.
gcloud
Pour créer une base de données Firestore, vous devez d'abord créer un
l'application App Engine, puis exécuter
gcloud firestore databases create
commande:
gcloud app create --region=us-central gcloud firestore databases create --region=us-central
Vous pouvez ignorer l'avertissement us-central is not a valid Firestore location
.
App Engine et Firestore acceptent les mêmes emplacements,
mais la région App Engine us-central
(Iowa) correspond à
Firestore nam5
(États-Unis)
un emplacement multirégional.
Créer un sujet Pub/Sub
Ce tutoriel utilise Pub/Sub comme source d'événements. Créez un un sujet Pub/Sub pour y publier un message. Découvrez comment créer et gérer des sujets.
Console
Dans la console Google Cloud, accédez à la page Sujets de Pub/Sub.
Cliquez sur
Créer un sujet.Dans le champ ID du sujet, saisissez
topic-callback
.Acceptez les autres valeurs par défaut.
Cliquez sur Create topic (Créer un sujet).
gcloud
Pour créer un sujet, exécutez la commande gcloud pubsub topics create
:
gcloud pubsub topics create topic-callback
Créer un bucket Cloud Storage
Ce tutoriel utilise Cloud Storage comme source d'événements. Créez un bucket Cloud Storage afin de pouvoir y importer un fichier. Découvrez comment créer des buckets de stockage.
Console
Dans la console Google Cloud, accédez à la page Buckets Cloud Storage.
Cliquez sur
Créer.Dans le champ Nom du bucket, saisissez
PROJECT_ID-bucket-callback
ID du projet est utilisée dans le workflow
callback-event-sample
pour identifier le bucket.Cliquez sur Continuer.
Pour le type d'emplacement, sélectionnez Région, puis us-central1 (Iowa).
Acceptez les autres valeurs par défaut.
Cliquez sur Créer.
gcloud
Pour créer un bucket, exécutez la commande gcloud storage buckets create
:
gcloud storage buckets create gs://PROJECT_ID-bucket-callback \ --location=us-central1
ID du projet
est utilisée dans le workflow callback-event-sample
pour identifier le bucket.
Une fois les sources d'événements créées, vous pouvez déployer le workflow du récepteur d'événements.
Déployer un workflow qui écoute les événements
Le workflow callback-event-listener
se déclenche lorsqu'un message est publié
dans un sujet Pub/Sub ou lorsqu'un fichier est importé dans un bucket Cloud Storage
bucket. Le workflow reçoit l'événement, récupère les détails de rappel appropriés à partir de la base de données Firestore, puis envoie une requête HTTP au point de terminaison de rappel.
Console
Dans la console Google Cloud, accédez à la page Workflows :
Cliquez sur
Créer.Saisissez un nom pour le nouveau workflow :
callback-event-listener
.Dans la liste Région, sélectionnez us-central1.
Sélectionnez le compte de service que vous avez créé précédemment.
Cliquez sur Suivant.
Dans l'éditeur de workflow, saisissez la définition suivante pour votre workflow :
Cliquez sur Déployer.
gcloud
Créez un fichier de code source pour votre workflow :
touch callback-event-listener.yaml
Dans un éditeur de texte, copiez le workflow suivant dans votre fichier de code source :
Déployez le workflow en saisissant la commande suivante :
gcloud workflows deploy callback-event-listener \ --source=callback-event-listener.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Remplacez
SERVICE_ACCOUNT_NAME
par le nom du compte de service que vous avez créé précédemment.
Déployer un workflow en attente des événements
Le workflow callback-event-sample
stocke les détails de son rappel dans une base de données Firestore, interrompt son exécution, puis attend que des événements spécifiques se produisent.
Console
Dans la console Google Cloud, accédez à Workflows :
Cliquez sur
Créer.Saisissez un nom pour le nouveau workflow :
callback-event-sample
.Dans la liste Région, sélectionnez us-central1.
Sélectionnez le compte de service que vous avez créé précédemment.
Cliquez sur Suivant.
Dans l'éditeur de workflow, saisissez la définition suivante pour votre workflow :
Cliquez sur Déployer.
gcloud
Créez un fichier de code source pour votre workflow :
touch callback-event-sample.yaml
Dans un éditeur de texte, copiez le workflow suivant dans votre fichier de code source :
Déployez le workflow en saisissant la commande suivante :
gcloud workflows deploy callback-event-sample \ --source=callback-event-sample.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Remplacez
SERVICE_ACCOUNT_NAME
par le nom du compte de service que vous avez créé précédemment.
Créer un déclencheur Eventarc pour acheminer les événements Pub/Sub
Un déclencheur Eventarc vous permet d'acheminer des événements en spécifiant des filtres pour le déclencheur, y compris la source de l'événement et le workflow cible.
Créez un déclencheur Eventarc pour exécuter le workflow callback-event-listener
suite à la publication d'un message dans un sujet Pub/Sub.
En savoir plus sur le déclenchement d'un workflow
Console
Dans la console Google Cloud, accédez à la page Eventarc.
Cliquez sur
Créer un déclencheur.Saisissez un nom de déclencheur
Par exemple,
trigger-pubsub-events-listener
.Dans la liste Fournisseur d'événements, sélectionnez Cloud Pub/Sub.
Dans la liste Événement, sous Personnalisé, sélectionnez google.cloud.pubsub.topic.v1.messagePublié.
Dans la liste Sélectionnez un sujet Cloud Pub/Sub, choisissez le sujet créés précédemment.
Dans la liste Région, sélectionnez us-central1 (Iowa).
Si vous y êtes invité, accordez le rôle
iam.serviceAccountTokenCreator
à le compte de service Pub/Sub.Sélectionnez le compte de service que vous avez créé précédemment.
Dans la liste Destination de l'événement, sélectionnez Workflows (Workflows).
Dans la liste Sélectionner un workflow, sélectionnez le workflow callback-event-listener.
Cliquez sur Créer.
gcloud
Pour créer un déclencheur, exécutez la commande
gcloud eventarc triggers create
commande:
gcloud eventarc triggers create trigger-pubsub-events-listener \ --location=us-central1 \ --destination-workflow=callback-event-listener \ --destination-workflow-location=us-central1 \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=topic-callback \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Les événements sont transformés et transmis à l'exécution du workflow en tant qu'arguments d'exécution. Notez que l'activation du nouveau déclencheur peut prendre jusqu'à deux minutes.
Créer un déclencheur Eventarc pour acheminer les événements Cloud Storage
Un déclencheur Eventarc vous permet d'acheminer des événements en spécifiant des filtres pour le déclencheur, y compris la source de l'événement et le workflow cible.
Créez un déclencheur Eventarc pour exécuter le workflow callback-event-listener
à la suite de l'importation d'un fichier dans un bucket Cloud Storage.
En savoir plus sur le déclenchement d'un workflow
Console
Dans la console Google Cloud, accédez à la page Eventarc .
Cliquez sur
Créer un déclencheur.Saisissez un nom de déclencheur
Par exemple,
trigger-storage-events-listener
.Dans la liste Fournisseur d'événements, sélectionnez Cloud Storage.
Dans la liste Événement, sous Accès directs, sélectionnez google.cloud.storage.object.v1.finalized.
Dans la liste Bucket, recherchez le bucket que vous avez créé précédemment. et sélectionnez-la.
Dans la liste Région, en fonction de votre bucket Cloud Storage : acceptent la valeur par défaut us-central1 (Iowa).
Si vous y êtes invité, attribuez le rôle
iam.serviceAccountTokenCreator
au compte de service Pub/Sub.Sélectionnez le compte de service que vous avez créé précédemment.
Dans la liste Destination de l'événement, sélectionnez Workflows (Workflows).
Dans la liste Sélectionner un workflow, sélectionnez le workflow callback-event-listener.
Cliquez sur Créer.
gcloud
Pour créer un déclencheur, exécutez la commande
gcloud eventarc triggers create
commande:
gcloud eventarc triggers create trigger-storage-events-listener \ --location=us-central1 \ --destination-workflow=callback-event-listener \ --destination-workflow-location=us-central1 \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=PROJECT_ID-bucket-callback" \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Les événements sont transformés et transmis à l'exécution du workflow en tant qu'arguments. Notez que l'activation du nouveau déclencheur peut prendre jusqu'à deux minutes.
Exécuter le workflow principal
L'exécution d'un workflow exécute la définition actuelle du workflow associé au workflow. Exécutez le workflow callback-event-sample
. Il s'agit de l'URL principale
et attend que des événements spécifiques se produisent, puis reprend son exécution
lorsque le workflow secondaire effectue les requêtes de rappel appropriées.
Console
Dans la console Google Cloud, accédez à la page Workflows.
Sur la page Workflows, cliquez sur le callback-event-sample pour accéder à sa page d'informations.
Sur la page Détails du workflow, cliquez sur play_arrow Exécuter.
Cliquez à nouveau sur Exécuter.
L'exécution du workflow commence. Pendant l'exécution, l'état d'exécution doit être
Running
et une entrée de journal semblable à la suivante doit s'afficher :Started waiting 1hr for an event from source topic-callback
.
gcloud
Pour exécuter un workflow, exécutez la
Commande gcloud workflows run
:
gcloud workflows run callback-event-sample \ --location=us-central1
L'exécution du workflow commence. Pendant l'exécution, vous devriez voir un état d'exécution semblable à celui-ci:
Waiting for execution [a848a164-268a-449c-b2fe-396f32f2ed66] to complete...working...
Générer des événements et vérifier l'état d'exécution
Vous pouvez vérifier que les résultats sont conformes aux attentes en générant des événements, en consultant les entrées de journal et en vérifiant l'état d'exécution du workflow.
Publier un message
Publiez un message dans le sujet Pub/Sub que vous avez précédemment créé.
Console
Dans la console Google Cloud, accédez à Pub/Sub Sujets.
Cliquez sur topic-callback.
Cliquez sur l'onglet Messages.
Cliquez sur Publier un message.
Dans le champ Corps du message, saisissez
Hello World
.Cliquez sur Publier.
gcloud
Pour publier un message, exécutez la commande gcloud pubsub topics publish :
gcloud pubsub topics publish topic-callback \ --message="Hello World"
Importer un objet
Importez un fichier dans le bucket Cloud Storage que vous avez créé précédemment.
Console
- Dans la console Google Cloud, accédez à la page Buckets Cloud Storage.
Cliquez sur le nom du bucket que vous avez créé précédemment.
Dans l'onglet Objects (Objets), effectuez l'une des opérations suivantes :
Effectuez un glisser-déposer du fichier souhaité depuis votre bureau ou votre gestionnaire de fichiers vers le volet principal de la console Google Cloud.
Cliquez sur Importer des fichiers, sélectionnez le fichier que vous souhaitez importer, puis cliquez sur Ouvrir.
gcloud
Pour importer un fichier, exécutez la commande gcloud storage cp
:
gcloud storage cp OBJECT_LOCATION gs://PROJECT_ID-bucket-callback/
Remplacez OBJECT_LOCATION
par le chemin d'accès local à votre objet. Exemple :random.txt
Afficher les entrées de journal et l'état d'exécution
Vérifiez que le workflow callback-event-sample
a bien été exécuté.
Console
Dans la console Google Cloud, accédez à la page Workflows.
Sur la page Workflows (Workflows), cliquez sur le workflow callback-event-sample pour accéder à sa page d'informations.
Sur la page Workflow Details (Détails du workflow), vous pouvez récupérer les détails d'une une exécution spécifique, cliquez sur l'ID correspondant.
L'état de l'exécution doit indiquer Succeeded (Réussie) et, dans le volet "Output" (Sortie), vous devriez voir les messages Pub/Sub reçus Événements Cloud Storage.
gcloud
Filtrez les entrées de journal et renvoyez la sortie au format JSON :
gcloud logging read "resource.type=workflows.googleapis.com/Workflow AND textPayload:calling OR textPayload:waiting" \ --format=json
Recherchez les entrées de journal semblables à celles-ci:
"textPayload": "Stopped waiting for an event from source..." "textPayload": "Calling back url https://workflowexecutions.googleapis.com/v1/projects/..." "textPayload": "Started waiting 1hr for an event from source..."
Vérifiez l'état de la dernière tentative d'exécution :
gcloud workflows executions wait-last
Le résultat doit ressembler à ce qui suit :
Using cached execution name: projects/1085953646031/locations/us-central1/workflows/callback-event-sample/executions/79929e4e-82c1-4da1-b068-f828034c01b7 Waiting for execution [79929e4e-82c1-4da1-b068-f828034c01b7] to complete...done. [...] state: SUCCEEDED
Effectuer un nettoyage
Si vous avez créé un projet pour ce tutoriel, supprimez-le. Si vous avez utilisé un projet existant et que vous souhaitez le conserver sans les modifications du présent tutoriel, supprimez les ressources créées pour ce tutoriel.
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 :
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Supprimer les ressources créées dans ce tutoriel
Étape suivante
- Essayez le tutoriel Créer un workflow avec intervention humaine à l'aide de rappels.