Publier et recevoir des événements en créant un bus et une inscription (Terraform)
Ce guide de démarrage rapide explique comment utiliser Terraform pour créer un bus Eventarc Advanced et l'enregistrer dans votre projet Google Cloud afin de pouvoir publier et recevoir des messages d'événement.
Un bus fait office de routeur central. Il reçoit les messages provenant de sources d'événements ou publiés par des fournisseurs.
Un enregistrement achemine les messages reçus par le bus vers une ou plusieurs destinations via un pipeline de traitement.
Dans le cadre de ce guide démarrage rapide, vous allez effectuer les étapes suivantes :
Déployer un service récepteur d'événements sur Cloud Run.
Créez un bus Eventarc Advanced.
Activez les événements provenant de sources Google.
Créez un pipeline et une inscription Eventarc Advanced.
Créez un workflow pour publier un message d'événement dans le bus.
Affichez les données d'événement dans les journaux Cloud Run.
Vous pouvez effectuer la plupart des étapes de ce guide de démarrage rapide à l'aide de Terraform. Pour effectuer toutes les étapes à l'aide de Google Cloud CLI, consultez Publier des événements à partir d'une source Google.
Pour en savoir plus sur l'utilisation de Terraform, consultez la documentation Terraform sur Google Cloud.
Avant de commencer
Les contraintes de sécurité définies par votre organisation peuvent vous empêcher d'effectuer les étapes suivantes. Pour en savoir plus sur la résolution des problèmes, consultez Développer des applications dans un environnement Google Cloud limité.
- 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 sans frais pour exécuter, tester et déployer des charges de travail.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Resource Manager and Identity and Access Management (IAM) APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Resource Manager and Identity and Access Management (IAM) APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Dans la console Google Cloud , activez Cloud Shell.
En bas de la console Google Cloud , une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.
Terraform est intégré à l'environnement Cloud Shell. Vous pouvez utiliser Cloud Shell pour déployer vos ressources Terraform sans avoir à installer Terraform.
Rôles requis
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 Cloud Run (
roles/run.admin) - Développeur Eventarc (
roles/eventarc.developer) - Administrateur de bus à messages Eventarc (
roles/eventarc.messageBusAdmin) - Accesseur de vues de journaux (
roles/logging.viewAccessor) - Administrateur de projet IAM (
roles/resourcemanager.projectIamAdmin) - Administrateur de compte de service (
roles/iam.serviceAccountAdmin) -
Utilisateur du compte de service (
roles/iam.serviceAccountUser) - Éditeur de workflows (
roles/workflows.editor)
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 avec des rôles personnalisés ou d'autres rôles prédéfinis.
Préparer le déploiement de Terraform
Avant de déployer des ressources Terraform, vous devez créer un fichier de configuration Terraform. Un fichier de configuration Terraform vous permet de définir l'état final souhaité pour votre infrastructure à l'aide de la syntaxe Terraform.
Dans Cloud Shell, définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer votre configuration Terraform. Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire :
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Remplacez
PROJECT_IDpar l'ID de votre projet Google Cloud .Notez que les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.
Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine). Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire :
mkdir DIRECTORY && cd DIRECTORY && touch main.tf
Remplacez
DIRECTORYpar le nom de votre répertoire Terraform.Le nom du fichier doit comporter l'extension
.tf. Par exemple, dans ce démarrage rapide, le fichier de configuration estmain.tf.
Définir votre configuration Terraform
Copiez les extraits de code Terraform suivants dans votre fichier main.tf. Vous pouvez également copier l'intégralité de l'exemple de code depuis GitHub. Pour ce faire, en haut à droite d'un extrait de code, cliquez sur >
Afficher sur GitHub.
Activer les API
Utilisez la ressource Terraform google_project_service pour activer les API requises pour appliquer la configuration Terraform :
Créer un compte de service
Pour les tests, créez un compte de service dédié et attribuez-lui des rôles IAM spécifiques.
Utilisez les ressources Terraform
google_service_account
et google_project_iam_member
pour créer le compte de service et lui accorder les rôles nécessaires pour publier et recevoir des événements :
Créer une destination d'événement
Utilisez la ressource Terraform google_cloud_run_v2_service pour créer un service Cloud Run en tant que destination d'événement qui consigne le contenu d'un événement :
Créer un bus Eventarc Advanced
Un bus reçoit les messages d'événement d'une source de messages ou publiés par un fournisseur, et sert de routeur de messages. Pour en savoir plus, consultez Créer un bus pour acheminer les messages.
Utilisez la ressource Terraform google_eventarc_message_bus pour créer un bus Eventarc Advanced :
Activer les événements provenant de sources Google
Pour publier des événements à partir de sources Google, vous devez créer une ressource GoogleApiSource qui représente un abonnement aux événements des API Google pour un bus Eventarc Advanced spécifique. Pour en savoir plus, consultez Publier des événements à partir de sources Google.
Utilisez la ressource Terraform google_eventarc_google_api_source pour activer les événements provenant de sources Google :
Tous les types d'événements Google compatibles envoyés directement depuis une source Google sont désormais collectés et publiés dans votre bus.
Créer un pipeline Eventarc Advanced
Un pipeline vous permet de configurer une destination cible et vous offre également la possibilité de transformer les événements correspondants avant de les distribuer à la destination.
Utilisez la ressource Terraform google_eventarc_pipeline pour créer un pipeline :
La destination de l'événement est l'URL complète de votre service Cloud Run, par exemple https://SERVICE_NAME-abcdef-uc.a.run.app. L'adresse e-mail du compte de service est utilisée pour générer un jeton OIDC.
Créer un enregistrement Eventarc Advanced
Un enregistrement détermine les messages à acheminer vers une destination et spécifie également le pipeline utilisé pour configurer une destination pour les messages d'événement. Pour en savoir plus, consultez Créer un enregistrement pour recevoir des événements.
Utilisez la ressource Terraform google_eventarc_enrollment pour créer une inscription :
L'expression de correspondance pour l'inscription utilise le langage CEL (Common Expression Language) pour publier des messages d'événement chaque fois qu'un workflow est créé. Dans une étape ultérieure, vous créerez un workflow.
Appliquer la configuration Terraform
Utilisez la CLI Terraform pour provisionner l'infrastructure en fonction du fichier de configuration. Pour en savoir plus, consultez Commandes Terraform de base.
Initialisez Terraform. Vous n'aurez à le faire qu'une seule fois par répertoire.
terraform init
Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option
-upgrade:terraform init -upgrade
Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
terraform plan
Corrigez la configuration si nécessaire.
Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant
yeslorsque vous y êtes invité :terraform apply
En règle générale, vous appliquez l'intégralité de la configuration en une seule fois. Toutefois, vous pouvez également cibler une ressource spécifique. Exemple :
terraform apply -target="google_eventarc_message_bus.default"
Attendez que Terraform affiche le message "Apply completed!" (Application terminée).
Publier un message d'événement dans le bus en créant un workflow
Workflows est une plate-forme d'orchestration entièrement gérée qui exécute des services dans un ordre que vous définissez : un workflow. Créez un workflow pour générer un type d'événement compatible à partir d'une source Google.
Dans votre répertoire d'accueil, créez un fichier appelé
myWorkflow.yaml.Copiez le workflow suivant et collez-le dans le nouveau fichier, puis enregistrez-le :
main: params: [input] steps: - checkSearchTermInInput: switch: - condition: '${"searchTerm" in input}' assign: - searchTerm: '${input.searchTerm}' next: readWikipedia - getLocation: call: sys.get_env args: name: GOOGLE_CLOUD_LOCATION result: location - setFromCallResult: assign: - searchTerm: '${text.split(location, "-")[0]}' - readWikipedia: call: http.get args: url: 'https://en.wikipedia.org/w/api.php' query: action: opensearch search: '${searchTerm}' result: wikiResult - returnOutput: return: '${wikiResult.body[1]}'Ce workflow transmet la région dans laquelle il est déployé à l'API Wikipedia et renvoie une liste d'articles Wikipédia associés.
Déployez le workflow à l'aide de la commande
gcloud workflows deploy:gcloud workflows deploy example-workflow --source=myWorkflow.yaml \ --service-account=eventarc-advanced-sa@PROJECT_ID.iam.gserviceaccount.com \ --location=us-central1
Afficher les données d'événement dans les journaux Cloud Run
Après avoir publié un événement sur votre bus Eventarc Advanced, vous pouvez consulter les journaux de votre service Cloud Run pour vérifier que l'événement a été reçu comme prévu.
Filtrez les entrées de journal créées par votre service :
gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.workflows.workflow.v1.created."'Recherchez une entrée de journal semblable à ceci :
message: 'Received event of type google.cloud.workflows.workflow.v1.created. Event data: {"@type":"type.googleapis.com/google.events.cloud.workflows.v1.WorkflowEventData","payload":{"name":"projects/PROJECT_ID/locations/us-central1/workflows/example-workflow","state":"ACTIVE"...
Vous avez créé un bus et une inscription Eventarc Advanced, activé la publication d'événements à partir de sources Google, créé un workflow pour générer un type d'événement compatible à partir d'un fournisseur Google, puis vérifié le résultat attendu dans les journaux du service récepteur d'événements.
Effectuer un nettoyage
Supprimez les ressources précédemment appliquées à votre configuration Terraform en exécutant la commande suivante et en saisissant yes à l'invite :
terraform destroy
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.
- Dans la console Google Cloud , accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.