Ce document explique comment utiliser les ressources Google Cloud dans Terraform pour créer des déclencheurs Eventarc à l'aide des ressources google_eventarc_trigger
pour les destinations suivantes:
- Cloud Run: utilisez la ressource Terraform
google_cloud_run_v2_service
. - Google Kubernetes Engine: utilisez la ressource Terraform
google_container_cluster
. - Workflows: utilisez la ressource Terraform
google_workflows_workflow
.
Les exemples de ce tutoriel utilisent des événements directs à partir de Cloud Storage, mais peuvent être adaptés à n'importe quel fournisseur d'événements. Pour les besoins de ce tutoriel, de nouvelles ressources sont créées en tant que source d'événements.
Pour obtenir des ressources et des conseils sur l'utilisation de Terraform, consultez la documentation de Terraform sur Google Cloud.
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 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.
Cloud Shell est un environnement shell dans lequel Terraform est déjà intégré.
Créer des déclencheurs Eventarc
Vous pouvez créer des déclencheurs Eventarc à l'aide de Terraform pour différentes destinations.
Cet exemple utilise l'interpolation pour les substitutions, telles que les variables de référence, les attributs de ressources et les fonctions d'appel.
Cloud Run
Déployez vos ressources avec Terraform pour créer des déclencheurs Eventarc à l'aide de Cloud Shell.
1. Activer les API
Utilisez le code suivant pour activer les API requises:
2. Créer un compte de service et configurer IAM
Utilisez le code suivant pour créer un compte de service dédié et des rôles IAM:
Si vous avez activé l'agent de service Pub/Sub le 8 avril 2021 ou à une date antérieure, attribuez le rôle iam.serviceAccountTokenCreator
à l'agent 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"
}
3. Créer un bucket Cloud Storage faisant office de fournisseur d'événements
Utilisez le code suivant pour créer un bucket Cloud Storage, avec des autorisations associées à Eventarc:
4. Définir un service Cloud Run en tant que cible d'événement
Créez un service Cloud Run en tant que destination d'événement pour le déclencheur. Utilisez la ressource google_cloud_run_v2_service
pour définir un service Cloud Run :
5. Définir un déclencheur Eventarc
Un déclencheur Eventarc connecte le fournisseur d'événements à une destination d'événement. Utilisez la ressource google_eventarc_trigger
pour définir le fournisseur d'événements directs Cloud Storage, en envoyant vers une destination Cloud Run.
Vous pouvez définir plusieurs matching_criteria
avec des attributs CloudEvents compatibles avec Eventarc, qui agissent comme le event-filters
que vous spécifiez lorsque vous créez un déclencheur. 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 Cloud Run spécifiques.
Seuls les événements correspondant à tous les filtres sont envoyés à la destination.
6. Appliquer les modifications
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.
Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.
Préparer Cloud Shell
- Lancez 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
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 nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension
.tf
, par exemplemain.tf
. Dans ce tutoriel, le fichier est appelémain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.
Copiez l'exemple de code 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.
- Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
- Enregistrez les modifications.
-
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
Appliquer les modifications
-
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).
- Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.
7. Vérifier la création des ressources
Pour vérifier que le service a été créé, procédez comme suit:
gcloud run services list --region us-central1
Pour confirmer que le déclencheur a été créé, procédez comme suit:
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
Déployez vos ressources avec Terraform pour créer des déclencheurs Eventarc à l'aide de Cloud Shell.
Le déclencheur Eventarc nécessite un service Google Kubernetes Engine. Pour simplifier ce tutoriel, vous allez configurer ce service en dehors de Terraform, entre les configurations Terraform.
1. Créer un cluster GKE
Utilisez le code suivant pour activer les API requises:
Utilisez le code suivant pour créer un cluster GKE:
2. Appliquer les modifications
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.
Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.
Préparer Cloud Shell
- Lancez 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
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 nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension
.tf
, par exemplemain.tf
. Dans ce tutoriel, le fichier est appelémain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.
Copiez l'exemple de code 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.
- Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
- Enregistrez les modifications.
-
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
Appliquer les modifications
-
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).
- Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.
3. Configurer 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
Exposer le déploiement en tant que service Kubernetes:x
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 hello-gke-df6469d4b-5vv22 1/1 Running
Si l'état (
STATUS
) est défini surPending
, 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.226.144 <none> 80/TCP kubernetes ClusterIP 34.118.224.1 <none> 443/TCP
4. Créer et configurer Eventarc
Utilisez la configuration suivante pour configurer un compte de service et lui attribuer des rôles spécifiques pour qu'Eventarc gère les événements pour GKE.
Utilisez le code suivant pour créer un bucket Cloud Storage, avec des autorisations associées à Eventarc:
Utilisez la configuration suivante pour activer les API requises et initialiser les services de destination GKE Eventarc:
Créer un déclencheur Eventarc qui achemine les événements Pub/Sub vers le service GKE hello-gke
.
Vous pouvez définir plusieurs matching_criteria
avec des attributs CloudEvents compatibles avec Eventarc, qui agissent comme le event-filters
que vous spécifiez lorsque vous créez un déclencheur. 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 GKE spécifiques.
Seuls les événements correspondant à tous les filtres sont envoyés à la destination.
5. Appliquer les modifications supplémentaires
Pour appliquer la configuration Terraform supplémentaire dans un projet Google Cloud, procédez comme suit:
Créez le compte d'identité Eventarc:
gcloud beta services identity create --service eventarc.googleapis.com
Ajoutez le nouveau code Terraform de l'étape précédente au fichier
main.tf
existant.Appliquez les configurations Terraform mises à jour:
terraform plan terraform apply
Attendez que Terraform affiche le message "Apply completed!" (Application terminée).
Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.
Workflows
Déployez vos ressources avec Terraform pour créer un workflow et un déclencheur Eventarc à l'aide de Cloud Shell.
1. Activer les API
Utilisez le code suivant pour activer les API requises:
2. Créer un compte de service et configurer IAM
Utilisez le code suivant pour créer un compte de service dédié et ajouter des rôles IAM:
Si vous avez activé l'agent de service Pub/Sub le 8 avril 2021 ou à une date antérieure, attribuez le rôle iam.serviceAccountTokenCreator
à l'agent 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"
}
3. Créer un bucket Cloud Storage faisant office de fournisseur d'événements
Utilisez le code suivant pour créer un bucket Cloud Storage, avec des autorisations associées à Eventarc:
4. Créer et déployer un workflow
Définissez et déployez un workflow qui est exécuté lorsqu'un objet est mis à jour dans le bucket créé:
5. Créer un déclencheur Eventarc
Créer un déclencheur Eventarc qui achemine les événements directs du bucket créé vers Workflows. Utilisez la ressource google_eventarc_trigger
pour définir la ressource de déclencheur Eventarc.
Vous pouvez définir plusieurs matching_criteria
avec des attributs CloudEvents compatibles avec Eventarc, qui agissent comme le event-filters
que vous spécifiez lorsque vous créez un déclencheur. 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 Workflows spécifiques.
Seuls les événements correspondant à tous les filtres sont envoyés à la destination.
6. Appliquer les modifications
Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.
Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.
Préparer Cloud Shell
- Lancez 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
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 nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension
.tf
, par exemplemain.tf
. Dans ce tutoriel, le fichier est appelémain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.
Copiez l'exemple de code 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.
- Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
- Enregistrez les modifications.
-
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
Appliquer les modifications
-
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).
- Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.
7. Vérifier la création du workflow
Pour vérifier que le workflow a été créé, exécutez la commande suivante:
gcloud workflows list --location us-central1
8. Vérifier la création du déclencheur Eventarc
Pour vérifier que le déclencheur Eventarc a été créé, exécutez la commande suivante:
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.
Cloud Run
Pour générer un événement, procédez comme suit :
Transférez un fichier texte vers Cloud Storage :
echo "Hello World" > random.txt gcloud storage cp random.txt gs://trigger-cloudrun-PROJECT_ID/random.txt
L'importation génère un événement, et le service Cloud Run consigne le message de l'événement.
Pour vérifier qu'un événement a été reçu, procédez comme suit:
- Pour afficher les entrées de journal liées aux événements créées par votre service, procédez comme suit :
gcloud logging read "resource.type=cloud_run_revision \ AND resource.labels.service_name=hello-events"
Vous pouvez également ouvrir la console Google Cloud, accéder à la ressource Cloud Run et afficher les journaux.
- 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-PROJECT_ID/random.txt", ...}
GKE
Pour générer un événement, procédez comme suit :
Transférez un fichier texte vers Cloud Storage :
echo "Hello World" > random.txt gcloud storage cp random.txt gs://trigger-gke-PROJECT_ID/random.txt
L'importation génère un événement, et le service Cloud Run consigne le message de l'événement.
Pour vérifier qu'un événement a été reçu, procédez comme suit:
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.pubsub.topic.v1.messagePublished", "message":"Received event of type google.cloud.pubsub.topic.v1.messagePublished.", [...]}
Workflows
Pour générer un événement, procédez comme suit :
Transférez un fichier texte vers Cloud Storage :
echo "Hello World" > random.txt gcloud storage cp random.txt gs://trigger-workflows-PROJECT_ID/random.txt
L'importation génère un événement, et le service Cloud Run consigne le message de l'événement.
Pour vérifier qu'un événement a été reçu, procédez comme suit:
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
,START_TIME
,END_TIME
etSTATUS
.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
Le résultat ressemble à ce qui suit :
... result: '"Received event google.cloud.storage.object.v1.finalized - trigger-workflows-PROJECT_ID, random.txt"' state: SUCCEEDED ...
Recherchez
state: SUCCEEDED
etresult: "Received event"
dans le résultat des workflows.
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 des frais. 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.
Étapes suivantes
- Pour déclencher un workflow avec des événements en utilisant gcloud CLI ou la console, consultez la page Déclencher un workflow avec des événements ou des messages Pub/Sub.