Recevoir des événements à l'aide de messages Pub/Sub (Terraform)
Ce guide de démarrage rapide explique comment utiliser Terraform pour créer un déclencheur Eventarc qui reçoit des événements directs de Pub/Sub et les achemine vers un service Cloud Run. Pour en savoir plus sur l'utilisation de Terraform pour créer des déclencheurs Eventarc, consultez Créer un déclencheur à l'aide de Terraform.
Dans ce guide de démarrage rapide, vous allez :
Préparez-vous à déployer Terraform.
Définissez une configuration Terraform qui effectue les opérations suivantes :
- Activer des API
- Créez un compte de service.
- Créez un sujet Pub/Sub en tant que fournisseur d'événements.
- Déployez un service sur Cloud Run en tant que destination d'événement.
- Créer un déclencheur Eventarc.
Appliquez votre configuration Terraform.
Cela vous permet de générer un événement en publiant un message dans le sujet Pub/Sub. Le déclencheur Eventarc achemine le message vers le service récepteur d'événements déployé sur Cloud Run. Le service consigne le message d'événement, ce qui vous fournit un exemple simple d'architecture événementielle.
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 de ce problème, 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.
-
Installez la Google Cloud CLI.
-
Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
-
Pour initialiser la gcloud CLI, exécutez la commande suivante :
gcloud init -
Créez ou sélectionnez un projet Google Cloud .
Rôles requis pour sélectionner ou créer un projet
- Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
-
Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (
roles/resourcemanager.projectCreator), qui contient l'autorisationresourcemanager.projects.create. Découvrez comment attribuer des rôles.
-
Créez un projet Google Cloud :
gcloud projects create PROJECT_ID
Remplacez
PROJECT_IDpar 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_IDpar le nom de votre projet Google Cloud .
-
Vérifiez que la facturation est activée pour votre projet Google Cloud .
Activez les API Cloud Resource Manager et Identity and Access Management (IAM) :
Rôles requis pour activer les API
Pour activer les API, vous avez besoin du rôle IAM Administrateur Service Usage (
roles/serviceusage.serviceUsageAdmin), qui contient l'autorisationserviceusage.services.enable. Découvrez comment attribuer des rôles.gcloud services enable cloudresourcemanager.googleapis.com
iam.googleapis.com -
Si vous utilisez un shell local, créez des identifiants d'authentification locaux pour votre compte utilisateur :
gcloud auth application-default login
Vous n'avez pas besoin de le faire si vous utilisez Cloud Shell.
Si une erreur d'authentification est renvoyée et que vous utilisez un fournisseur d'identité (IdP) externe, vérifiez que vous vous êtes connecté à la gcloud CLI avec votre identité fédérée.
-
Installez la Google Cloud CLI.
-
Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
-
Pour initialiser la gcloud CLI, exécutez la commande suivante :
gcloud init -
Créez ou sélectionnez un projet Google Cloud .
Rôles requis pour sélectionner ou créer un projet
- Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
-
Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (
roles/resourcemanager.projectCreator), qui contient l'autorisationresourcemanager.projects.create. Découvrez comment attribuer des rôles.
-
Créez un projet Google Cloud :
gcloud projects create PROJECT_ID
Remplacez
PROJECT_IDpar 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_IDpar le nom de votre projet Google Cloud .
-
Vérifiez que la facturation est activée pour votre projet Google Cloud .
Activez les API Cloud Resource Manager et Identity and Access Management (IAM) :
Rôles requis pour activer les API
Pour activer les API, vous avez besoin du rôle IAM Administrateur Service Usage (
roles/serviceusage.serviceUsageAdmin), qui contient l'autorisationserviceusage.services.enable. Découvrez comment attribuer des rôles.gcloud services enable cloudresourcemanager.googleapis.com
iam.googleapis.com -
Si vous utilisez un shell local, créez des identifiants d'authentification locaux pour votre compte utilisateur :
gcloud auth application-default login
Vous n'avez pas besoin de le faire si vous utilisez Cloud Shell.
Si une erreur d'authentification est renvoyée et que vous utilisez un fournisseur d'identité (IdP) externe, vérifiez que vous vous êtes connecté à la gcloud CLI avec votre identité fédérée.
- Si vous utilisez un projet existant pour ce guide, vérifiez que vous disposez des autorisations nécessaires pour suivre les instructions. Si vous avez créé un projet, vous disposez déjà des autorisations requises.
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 Cloud Run (
roles/run.admin) -
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)
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.
-
Administrateur Cloud Run (
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.
Si vous utilisez un shell local, installez Terraform.
Terraform est déjà intégré à l'environnement Cloud Shell. Vous pouvez utiliser Cloud Shell pour déployer vos ressources Terraform sans avoir à installer Terraform.
Dans Cloud Shell ou votre shell local, 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). 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
Pour activer les API requises pour appliquer la configuration Terraform, utilisez la ressource Terraform google_project_service :
Créer un compte de service
Chaque déclencheur Eventarc est associé à un compte de service IAM. Pour créer un compte de service dédié à des fins de test, utilisez la ressource Terraform google_service_account :
Si vous avez activé l'agent de service Pub/Sub le 8 avril 2021 ou avant cette date, attribuez-lui le rôle Créateur de jetons du compte de service (roles/iam.serviceAccountTokenCreator).
resource "google_project_iam_member" "tokencreator" { project = data.google_project.project.id role = "roles/iam.serviceAccountTokenCreator" member = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com" }
Créer un sujet Pub/Sub en tant que fournisseur d'événements
Pour créer un sujet Pub/Sub, utilisez la ressource Terraform google_pubsub_topic. Pour attribuer à votre compte de service le rôle Éditeur Pub/Sub (roles/pubsub.publisher) au niveau du sujet, utilisez la ressource Terraform google_pubsub_topic_iam_member :
Déployer un récepteur d'événements sur Cloud Run
Pour créer un service Cloud Run en tant que destination d'événement, utilisez la ressource Terraform google_cloud_run_v2_service. Pour accorder à votre compte de service le rôle Demandeur Cloud Run (roles/run.invoker) au niveau du service, utilisez la ressource Terraform google_cloud_run_v2_service_iam_member :
Créer un déclencheur Eventarc
Pour créer un déclencheur Eventarc afin d'écouter les messages Pub/Sub, utilisez la ressource Terraform google_eventarc_trigger :
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 ne devez effectuer cette opération 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 général, vous appliquez l'intégralité de la configuration en une seule fois. Cependant, vous pouvez également cibler une ressource spécifique. Exemple :
terraform apply -target="google_eventarc_trigger.default"
Après avoir activé les API, il peut s'écouler quelques minutes avant que l'action ne se propage et que vous puissiez déployer d'autres ressources. Si vous rencontrez un problème, réessayez d'appliquer la configuration Terraform.
Attendez que Terraform affiche le message "Apply completed!" (Application terminée).
Vérifier la création des ressources
Vérifiez que le service Cloud Run a été créé :
gcloud run services list --region us-central1La sortie devrait ressembler à ce qui suit :
SERVICE: hello-events REGION: us-central1 URL: https://hello-events-13335919645.us-central1.run.app LAST DEPLOYED BY: ... LAST DEPLOYED AT: 2024-12-16T15:00:52.606160ZVérifiez que le déclencheur Eventarc a bien été créé :
gcloud eventarc triggers list --location us-central1La sortie devrait ressembler à ce qui suit :
NAME: trigger-pubsub-cloudrun-tf TYPE: google.cloud.pubsub.topic.v1.messagePublished DESTINATION: Cloud Run service: hello-events ACTIVE: Yes LOCATION: us-central1
Générer et afficher un événement de type sujet Pub/Sub.
Vous pouvez générer un événement en publiant un message dans le sujet Pub/Sub. Le déclencheur Eventarc achemine le message vers le service récepteur d'événements déployé sur Cloud Run, et le service consigne le message d'événement.
Recherchez et définissez le sujet Pub/Sub en tant que variable d'environnement :
gcloud config set eventarc/location us-central1 export RUN_TOPIC=$(gcloud eventarc triggers describe trigger-pubsub-cloudrun-tf \ --format='value(transport.pubsub.topic)')Pour générer un événement, publiez un message dans le sujet Pub/Sub :
gcloud pubsub topics publish $RUN_TOPIC --message "Hello World!"L'événement est envoyé au service Cloud Run, qui consigne le message d'événement.
Filtrez les entrées de journal créées par votre service :
gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.pubsub.topic.v1.messagePublished"'
Recherchez une entrée de journal semblable à ceci :
jsonPayload: ... message: 'Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: Hello World!'
Vous avez utilisé Terraform pour déployer un service de récepteur d'événements sur Cloud Run et créer un déclencheur Eventarc. Après avoir généré un événement à partir de Pub/Sub, vous pouvez l'afficher dans les journaux Cloud Run.
Effectuer un nettoyage
Une fois que vous avez terminé les tâches décrites dans ce guide de démarrage rapide, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées.
Supprimez les ressources précédemment appliquées à votre configuration Terraform en exécutant la commande suivante et en saisissant yes à la requête :
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.
Supprimer un projet Google Cloud :
gcloud projects delete PROJECT_ID
Si vous envisagez d'explorer plusieurs tutoriels et guides de démarrage rapide, réutiliser des projets peut vous aider à ne pas dépasser les limites de quotas des projets.