Ce document explique comment utiliser Terraform et la ressource google_eventarc_trigger
pour créer des déclencheurs Eventarc pour les destinations Google Cloudsuivantes:
Pour en savoir plus sur l'utilisation de Terraform, consultez la documentation Terraform sur Google Cloud.
Les exemples de code de ce guide acheminent des événements directs à partir de Cloud Storage, mais peuvent être adaptés à n'importe quel fournisseur d'événements. Par exemple, pour découvrir comment acheminer des événements directs de Pub/Sub vers Cloud Run, consultez le guide de démarrage rapide de Terraform.
Avant de commencer
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Resource Manager and Identity and Access Management (IAM) APIs.
-
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.
Terraform est intégré à l'environnement Cloud Shell. Vous pouvez utiliser Cloud Shell pour déployer vos ressources Terraform sans avoir à installer Terraform.
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.
Préparer Cloud Shell
Dans Cloud Shell, définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations 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_ID
par l'ID de votre Google Cloud projet.
Notez que les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.
Préparer le répertoire
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 fichier dans ce répertoire:
mkdir DIRECTORY && cd DIRECTORY && touch main.tf
Le nom du fichier doit comporter l'extension .tf
. Par exemple, dans ce document, le fichier est appelé main.tf
.
Définir votre configuration Terraform
Copiez les exemples de code Terraform applicables dans le fichier main.tf
que vous venez de créer. Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.
En règle générale, vous appliquez l'ensemble de la configuration en une seule fois. Toutefois, vous pouvez également cibler une ressource spécifique. Exemple :
terraform apply -target="google_eventarc_trigger.default"
Notez que les exemples de code Terraform utilisent l'interpolation pour les substitutions, telles que les variables de référence, les attributs de ressources et les fonctions d'appel.
Activer les API
Les exemples Terraform partent généralement du principe que les API requises sont activées dans votre projetGoogle Cloud . Utilisez le code suivant pour activer les API:
Cloud Run
GKE
Workflows
Créer un compte de service et configurer son accès
Chaque déclencheur Eventarc est associé à un compte de service IAM au moment de sa création. Utilisez le code suivant pour créer un compte de service dédié et attribuer au compte de service géré par l'utilisateur des rôles Identity and Access Management spécifiques pour gérer les événements:
Cloud Run
L'agent de service Pub/Sub est créé automatiquement lorsque l'API Pub/Sub est activée. Si l'agent de service Pub/Sub a été créé le 8 avril 2021 ou avant cette date, et que le compte de service ne dispose pas du rôle Agent de service Cloud Pub/Sub (roles/pubsub.serviceAgent
), attribuez le rôle Créateur de jetons du compte de service (roles/iam.serviceAccountTokenCreator
) à l'agent de service. Pour en savoir plus, consultez la section Créer et attribuer des rôles aux agents de service.
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" }
GKE
Avant de créer le compte de service, activez Eventarc pour gérer les clusters GKE:
Créez le compte de service :
Workflows
L'agent de service Pub/Sub est créé automatiquement lorsque l'API Pub/Sub est activée. Si l'agent de service Pub/Sub a été créé le 8 avril 2021 ou avant cette date, et que le compte de service ne dispose pas du rôle Agent de service Cloud Pub/Sub (roles/pubsub.serviceAgent
), attribuez le rôle Créateur de jetons du compte de service (roles/iam.serviceAccountTokenCreator
) à l'agent de service. Pour en savoir plus, consultez la section Créer et attribuer des rôles aux agents de service.
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 bucket Cloud Storage faisant office de fournisseur d'événements
Utilisez le code suivant pour créer un bucket Cloud Storage et attribuez le rôle Éditeur Pub/Sub (roles/pubsub.publisher
) à l'agent de service Cloud Storage.
Cloud Run
GKE
Workflows
Créer un récepteur d'événements qui servira de cible d'événement
Créez un récepteur d'événements à l'aide de l'une des ressources Terraform suivantes:
Cloud Run
Créez un service Cloud Run en tant que destination d'événement pour le déclencheur Eventarc:
GKE
Pour simplifier ce guide, créez un service Google Kubernetes Engine en tant que destination d'événement en dehors de Terraform, entre l'application des configurations Terraform.
Si vous n'avez jamais créé de déclencheur dans ce projet Google Cloud , exécutez la commande suivante pour créer l'agent de service Eventarc:
gcloud beta services identity create --service eventarc.googleapis.com
Créez un cluster GKE :
Déployez sur GKE un service Kubernetes qui recevra les requêtes HTTP et les événements de journaux à l'aide d'une image Cloud Run prédéfinie,
us-docker.pkg.dev/cloudrun/container/hello
:Obtenez des identifiants d'authentification pour interagir avec le cluster :
gcloud container clusters get-credentials eventarc-cluster \ --region=us-central1
Créez un déploiement nommé
hello-gke
:kubectl create deployment hello-gke \ --image=us-docker.pkg.dev/cloudrun/container/hello
Exposez le déploiement en tant que service Kubernetes:
kubectl expose deployment hello-gke \ --type ClusterIP --port 80 --target-port 8080
Assurez-vous que le pod est en cours d'exécution:
kubectl get pods
La sortie devrait ressembler à ce qui suit :
NAME READY STATUS RESTARTS AGE hello-gke-5b6574b4db-rzzcr 1/1 Running 0 2m45s
Si l'état (
STATUS
) est défini surPending
ouContainerCreating
, le pod est en cours de déploiement. Attendez une minute pour que le déploiement soit terminé, puis vérifiez à nouveau l'état.Assurez-vous que le service est en cours d'exécution:
kubectl get svc
La sortie devrait ressembler à ce qui suit :
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-gke ClusterIP 34.118.230.123 <none> 80/TCP 4m46s kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 14m
Workflows
Déployez un workflow qui s'exécute lorsqu'un objet est mis à jour dans le bucket Cloud Storage:
Définir un déclencheur Eventarc
Un déclencheur Eventarc achemine les événements d'un fournisseur d'événements vers une destination d'événement. Utilisez la ressource google_eventarc_trigger
pour spécifier des attributs CloudEvents dans matching_criteria
et filtrer les événements. Pour en savoir plus, suivez les instructions lors de la création d'un déclencheur pour un fournisseur, un type d'événement et une destination spécifiques.
Seuls les événements correspondant à tous les filtres sont envoyés à la destination.
Cloud Run
Créer un déclencheur Eventarc qui achemine les événements Cloud Storage vers le service Cloud Run hello-event
.
GKE
Créer un déclencheur Eventarc qui achemine les événements Cloud Storage vers le service GKE hello-gke
.
Workflows
Créez un déclencheur Eventarc qui achemine les événements Cloud Storage vers le workflow nommé storage-workflow-tf
.
Appliquer Terraform
Utilisez la CLI Terraform pour provisionner l'infrastructure en fonction du fichier de configuration.
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.
Initialisez Terraform. Cette opération n'est à effectuer 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 les modifications de la configuration si nécessaire.
Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant
yes
lorsque vous y êtes invité:terraform apply
Attendez que Terraform affiche le message "Apply completed!" (Application terminée).
Vérifier la création des ressources
Cloud Run
Vérifiez que le service a été créé:
gcloud run services list --region us-central1
Vérifiez que le déclencheur a été créé:
gcloud eventarc triggers list --location us-central1
La sortie devrait ressembler à ce qui suit :
NAME: trigger-storage-cloudrun-tf TYPE: google.cloud.storage.object.v1.finalized DESTINATION: Cloud Run service: hello-events ACTIVE: Yes LOCATION: us-central1
GKE
Vérifiez que le service a été créé:
kubectl get service hello-gke
Vérifiez que le déclencheur a été créé:
gcloud eventarc triggers list --location us-central1
La sortie devrait ressembler à ce qui suit :
NAME: trigger-storage-gke-tf TYPE: google.cloud.storage.object.v1.finalized DESTINATION: GKE: hello-gke ACTIVE: Yes LOCATION: us-central1
Workflows
Vérifiez que le workflow a bien été créé:
gcloud workflows list --location us-central1
Vérifiez que le déclencheur Eventarc a bien été créé:
gcloud eventarc triggers list --location us-central1
La sortie devrait ressembler à ce qui suit :
NAME: trigger-storage-workflows-tf TYPE: google.cloud.storage.object.v1.finalized DESTINATION: Workflows: storage-workflow-tf ACTIVE: Yes LOCATION: us-central1
Générer et afficher un événement
Vous pouvez générer un événement et vérifier que le déclencheur Eventarc fonctionne comme prévu.
Récupérez le nom du bucket Cloud Storage que vous avez créé précédemment:
gcloud storage ls
Importez un fichier texte dans le bucket Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://BUCKET_NAME/random.txt
Remplacez
BUCKET_NAME
par le nom du bucket Cloud Storage que vous avez récupéré à l'étape précédente. Exemple :gcloud storage cp random.txt gs://BUCKET_NAME/random.txt
L'importation génère un événement, et le service de destinataire d'événements consigne le message de l'événement.
Vérifiez qu'un événement a été reçu:
Cloud Run
Filtrez les entrées de journal créées par votre service:
gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.storage.object.v1.finalized."'
Recherchez une entrée de journal semblable à ceci :
Received event of type google.cloud.storage.object.v1.finalized. Event data: { "kind": "storage#object", "id": "trigger-cloudrun-BUCKET_NAME/random.txt", ...}
GKE
Recherchez l'ID du pod :
POD_NAME=$(kubectl get pods -o custom-columns=":metadata.name" --no-headers)
Cette commande utilise le résultat formaté de
kubectl
.Vérifiez les journaux du pod:
kubectl logs $POD_NAME
Recherchez une entrée de journal semblable à ceci :
{"severity":"INFO","eventType":"google.cloud.storage.object.v1.finalized","message": "Received event of type google.cloud.storage.object.v1.finalized. Event data: ...}
Workflows
Vérifiez qu'une exécution de workflow est déclenchée en répertoriant les cinq dernières exécutions:
gcloud workflows executions list storage-workflow-tf --limit=5
Le résultat doit inclure une liste d'exécutions avec les paramètres
NAME
,STATE
,START_TIME
etEND_TIME
.Obtenez les résultats pour l'exécution la plus récente:
EXECUTION_NAME=$(gcloud workflows executions list storage-workflow-tf --limit=1 --format "value(name)") gcloud workflows executions describe $EXECUTION_NAME
Vérifiez que le résultat ressemble à ce qui suit:
... result: '"Received event google.cloud.storage.object.v1.finalized - BUCKET_NAME, random.txt"' startTime: '2024-12-13T17:23:50.451316533Z' state: SUCCEEDED ...
Effectuer un nettoyage
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 que des frais ne vous soient facturés. La suppression de votre projet Google Cloud arrête la facturation de toutes les ressources utilisées dans ce 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.