Questo documento descrive come utilizzare le risorse Google Cloud in Terraform per creare trigger Eventarc utilizzando le risorse google_eventarc_trigger
per le destinazioni seguenti:
- Cloud Run: utilizza la risorsa Terraform
google_cloud_run_v2_service
. - Google Kubernetes Engine: utilizza la risorsa Terraform
google_container_cluster
. - Workflows: utilizza la risorsa Terraform
google_workflows_workflow
.
Gli esempi in questo tutorial utilizzano eventi diretti da Cloud Storage, ma possono essere adattati per qualsiasi fornitore di eventi. Ai fini di questo tutorial, vengono create nuove risorse come origine degli eventi.
Per risorse e indicazioni sull'utilizzo di Terraform, consulta la documentazione di Terraform su Google Cloud.
Prima di iniziare
- 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 è un ambiente shell con Terraform già integrato.
Crea trigger Eventarc
Puoi creare trigger Eventarc utilizzando Terraform per destinazioni diverse.
Questo esempio utilizza l'interpolazione per sostituzioni come variabili di riferimento, attributi delle risorse e funzioni di chiamata.
Cloud Run
Utilizzando Cloud Shell, esegui il deployment delle tue risorse con Terraform per creare trigger Eventarc.
1. Abilita le API
Utilizza il codice seguente per abilitare le API richieste:
2. Crea un account di servizio e configura IAM
Utilizza il codice seguente per creare un account di servizio e ruoli IAM dedicati:
Se hai abilitato l'agente di servizio Pub/Sub entro l'8 aprile 2021, concedi il ruolo iam.serviceAccountTokenCreator
all'account di servizio gestito da Google:
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. Crea un bucket Cloud Storage come provider di eventi
Utilizza il codice seguente per creare un bucket Cloud Storage, con autorizzazioni relative a Eventarc:
4. Definire un servizio Cloud Run come target di evento
Creare un servizio Cloud Run come destinazione evento per il trigger. Utilizza la risorsa google_cloud_run_v2_service
per definire un servizio Cloud Run:
5. Definisci un trigger Eventarc
Un trigger Eventarc connette il provider di eventi a una destinazione dell'evento. Utilizza la risorsa google_eventarc_trigger
per definire il provider di eventi diretti Cloud Storage, inviandolo a una destinazione Cloud Run.
Puoi definire più matching_criteria
con gli attributi CloudEvents supportati da Eventarc che funzionano come il valore event-filters
specificato quando crei un trigger. Per ulteriori informazioni, segui le istruzioni quando crei un trigger per un provider, un tipo di evento e una destinazione Cloud Run specifici.
Gli eventi che corrispondono a tutti i filtri vengono inviati alla destinazione.
6. Applica le modifiche
Per informazioni su come applicare o rimuovere una configurazione Terraform, consulta Comandi di base per Terraform.
Per applicare la configurazione Terraform in un progetto Google Cloud, completa i passaggi nelle sezioni seguenti.
Preparazione di Cloud Shell
- Avvia Cloud Shell.
-
Imposta il progetto Google Cloud predefinito a cui vuoi applicare le configurazioni Terraform.
Devi eseguire questo comando solo una volta per progetto e puoi eseguirlo in qualsiasi directory.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Le variabili di ambiente vengono sostituite se imposti valori espliciti nel file di configurazione Terraform.
Prepara la directory
Ogni file di configurazione Terraform deve avere la propria directory (detta anche modulo principale).
-
In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome del file deve avere l'estensione
.tf
, ad esempiomain.tf
. In questo tutorial, il file viene denominatomain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Se stai seguendo un tutorial, puoi copiare il codice campione in ogni sezione o passaggio.
Copia il codice campione nel file
main.tf
appena creato.Facoltativamente, copia il codice da GitHub. Questa opzione è consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end.
- Esamina e modifica i parametri di esempio da applicare al tuo ambiente.
- Salva le modifiche.
-
Inizializza Terraform. Devi eseguire questa operazione una sola volta per directory.
terraform init
Facoltativamente, per utilizzare la versione più recente del provider Google, includi l'opzione
-upgrade
:terraform init -upgrade
Applica le modifiche
-
Esamina la configurazione e verifica che le risorse che Terraform creerà o aggiornerà corrispondano alle tue aspettative:
terraform plan
Se necessario, apporta le correzioni alla configurazione.
-
Applica la configurazione Terraform eseguendo il comando seguente e inserendo
yes
alla richiesta:terraform apply
Attendi che in Terraform venga visualizzato il messaggio "Apply complete!" (Applicazione completata).
- Apri il progetto Google Cloud per visualizzare i risultati. Nella console Google Cloud, vai alle risorse nell'interfaccia utente per assicurarti che Terraform le abbia create o aggiornate.
7. Verifica la creazione di risorse
Per verificare che il servizio sia stato creato:
gcloud run services list --region us-central1
Per verificare che l'attivatore sia stato creato:
gcloud eventarc triggers list --location us-central1
L'output dovrebbe essere simile al seguente:
NAME: trigger-storage-cloudrun-tf
TYPE: google.cloud.storage.object.v1.finalized
DESTINATION: Cloud Run service: hello-events
ACTIVE: Yes
LOCATION: us-central1
GKE
Utilizzando Cloud Shell, esegui il deployment delle tue risorse con Terraform per creare trigger Eventarc.
Il trigger Eventarc richiede un servizio Google Kubernetes Engine. Per semplificare questo tutorial, configurerai questo servizio al di fuori di Terraform, durante l'applicazione di configurazioni Terraform.
1. crea un cluster GKE
Utilizza il codice seguente per abilitare le API richieste:
Utilizza il codice seguente per creare un cluster GKE:
2. Applica le modifiche
Per informazioni su come applicare o rimuovere una configurazione Terraform, consulta Comandi di base per Terraform.
Per applicare la configurazione Terraform in un progetto Google Cloud, completa i passaggi nelle sezioni seguenti.
Preparazione di Cloud Shell
- Avvia Cloud Shell.
-
Imposta il progetto Google Cloud predefinito a cui vuoi applicare le configurazioni Terraform.
Devi eseguire questo comando solo una volta per progetto e puoi eseguirlo in qualsiasi directory.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Le variabili di ambiente vengono sostituite se imposti valori espliciti nel file di configurazione Terraform.
Prepara la directory
Ogni file di configurazione Terraform deve avere la propria directory (detta anche modulo principale).
-
In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome del file deve avere l'estensione
.tf
, ad esempiomain.tf
. In questo tutorial, il file viene denominatomain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Se stai seguendo un tutorial, puoi copiare il codice campione in ogni sezione o passaggio.
Copia il codice campione nel file
main.tf
appena creato.Facoltativamente, copia il codice da GitHub. Questa opzione è consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end.
- Esamina e modifica i parametri di esempio da applicare al tuo ambiente.
- Salva le modifiche.
-
Inizializza Terraform. Devi eseguire questa operazione una sola volta per directory.
terraform init
Facoltativamente, per utilizzare la versione più recente del provider Google, includi l'opzione
-upgrade
:terraform init -upgrade
Applica le modifiche
-
Esamina la configurazione e verifica che le risorse che Terraform creerà o aggiornerà corrispondano alle tue aspettative:
terraform plan
Se necessario, apporta le correzioni alla configurazione.
-
Applica la configurazione Terraform eseguendo il comando seguente e inserendo
yes
alla richiesta:terraform apply
Attendi che in Terraform venga visualizzato il messaggio "Apply complete!" (Applicazione completata).
- Apri il progetto Google Cloud per visualizzare i risultati. Nella console Google Cloud, vai alle risorse nell'interfaccia utente per assicurarti che Terraform le abbia create o aggiornate.
3. Configurare GKE
Eseguire il deployment del container hello
di Cloud Run come servizio Kubernetes su GKE. Questo servizio registra richieste ed eventi HTTP ricevuti:
Recupera le credenziali di autenticazione per interagire con il cluster:
gcloud container clusters get-credentials eventarc-cluster \ --region=us-central1
Crea un deployment denominato
hello-gke
:kubectl create deployment hello-gke \ --image=gcr.io/cloudrun/hello
Esponi il deployment come servizio Kubernetes:x
kubectl expose deployment hello-gke \ --type ClusterIP --port 80 --target-port 8080
Assicurati che il pod sia in esecuzione:
kubectl get pods
L'output dovrebbe essere simile al seguente:
NAME READY STATUS hello-gke-df6469d4b-5vv22 1/1 Running
Se
STATUS
èPending
, è in corso il deployment del pod. Attendi un minuto per il completamento del deployment e controlla di nuovo lo stato.Assicurati che il servizio sia in esecuzione:
kubectl get svc
L'output dovrebbe essere simile al seguente:
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. Crea e configura Eventarc
Utilizza la configurazione seguente per impostare un account di servizio e concedere ruoli specifici a Eventarc per la gestione degli eventi per GKE.
Utilizza il codice seguente per creare un bucket Cloud Storage, con autorizzazioni relative a Eventarc:
Utilizza la configurazione seguente per abilitare le API richieste e inizializzare i servizi di destinazione GKE Eventarc:
Creare un trigger Eventarc che instrada gli eventi Pub/Sub al servizio GKE hello-gke
.
Puoi definire più matching_criteria
con gli attributi CloudEvents supportati da Eventarc che funzionano come il valore event-filters
specificato quando crei un trigger. Per ulteriori informazioni, segui le istruzioni quando crei un trigger per provider, tipo di evento e destinazione GKE specifici.
Gli eventi che corrispondono a tutti i filtri vengono inviati alla destinazione.
5. Applica le modifiche aggiuntive
Per applicare la configurazione Terraform aggiuntiva in un progetto Google Cloud, completa questi passaggi:
Crea l'account di identità Eventarc:
gcloud beta services identity create --service eventarc.googleapis.com
Aggiungi al file
main.tf
esistente il nuovo codice Terraform del passaggio precedente.Applica le configurazioni di Terraform aggiornate:
terraform plan terraform apply
Attendi che in Terraform venga visualizzato il messaggio "Apply complete!" (Applicazione completata).
Apri il tuo progetto Google Cloud per visualizzare i risultati. Nella console Google Cloud, vai alle risorse nell'interfaccia utente per assicurarti che Terraform le abbia create o aggiornate.
Workflows
Utilizzando Cloud Shell, esegui il deployment delle tue risorse con Terraform per creare un flusso di lavoro e un trigger Eventarc.
1. Abilita le API
Utilizza il codice seguente per abilitare le API richieste:
2. Crea un account di servizio e configura IAM
Utilizza il codice seguente per creare un account di servizio dedicato e aggiungere ruoli IAM:
Se hai abilitato l'agente di servizio Pub/Sub entro l'8 aprile 2021, concedi il ruolo iam.serviceAccountTokenCreator
all'account di servizio gestito da Google:
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. Crea un bucket Cloud Storage come provider di eventi
Utilizza il codice seguente per creare un bucket Cloud Storage, con autorizzazioni relative a Eventarc:
4. Crea ed esegui il deployment di un flusso di lavoro
Definisci ed esegui il deployment di un flusso di lavoro che viene eseguito quando un oggetto viene aggiornato nel bucket creato:
5. Crea un trigger Eventarc
Creare un trigger Eventarc che instrada gli eventi diretti sul bucket creato a Workflows. Utilizza la risorsa google_eventarc_trigger
per definire la risorsa trigger Eventarc.
Puoi definire più matching_criteria
con gli attributi CloudEvents supportati da Eventarc che funzionano come il valore event-filters
specificato quando crei un trigger. Per ulteriori informazioni, segui le istruzioni quando crei un trigger per provider, tipo di evento e destinazione Workflows specifici.
Gli eventi che corrispondono a tutti i filtri vengono inviati alla destinazione.
6. Applica le modifiche
Per informazioni su come applicare o rimuovere una configurazione Terraform, consulta Comandi di base per Terraform.
Per applicare la configurazione Terraform in un progetto Google Cloud, completa i passaggi nelle sezioni seguenti.
Preparazione di Cloud Shell
- Avvia Cloud Shell.
-
Imposta il progetto Google Cloud predefinito a cui vuoi applicare le configurazioni Terraform.
Devi eseguire questo comando solo una volta per progetto e puoi eseguirlo in qualsiasi directory.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Le variabili di ambiente vengono sostituite se imposti valori espliciti nel file di configurazione Terraform.
Prepara la directory
Ogni file di configurazione Terraform deve avere la propria directory (detta anche modulo principale).
-
In Cloud Shell, crea una directory e un nuovo file al suo interno. Il nome del file deve avere l'estensione
.tf
, ad esempiomain.tf
. In questo tutorial, il file viene denominatomain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Se stai seguendo un tutorial, puoi copiare il codice campione in ogni sezione o passaggio.
Copia il codice campione nel file
main.tf
appena creato.Facoltativamente, copia il codice da GitHub. Questa opzione è consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end.
- Esamina e modifica i parametri di esempio da applicare al tuo ambiente.
- Salva le modifiche.
-
Inizializza Terraform. Devi eseguire questa operazione una sola volta per directory.
terraform init
Facoltativamente, per utilizzare la versione più recente del provider Google, includi l'opzione
-upgrade
:terraform init -upgrade
Applica le modifiche
-
Esamina la configurazione e verifica che le risorse che Terraform creerà o aggiornerà corrispondano alle tue aspettative:
terraform plan
Se necessario, apporta le correzioni alla configurazione.
-
Applica la configurazione Terraform eseguendo il comando seguente e inserendo
yes
alla richiesta:terraform apply
Attendi che in Terraform venga visualizzato il messaggio "Apply complete!" (Applicazione completata).
- Apri il progetto Google Cloud per visualizzare i risultati. Nella console Google Cloud, vai alle risorse nell'interfaccia utente per assicurarti che Terraform le abbia create o aggiornate.
7. Verificare la creazione del flusso di lavoro
Per verificare che il flusso di lavoro sia stato creato, esegui:
gcloud workflows list --location us-central1
8. Verifica la creazione del trigger Eventarc
Per verificare che il trigger Eventarc sia creato, esegui:
gcloud eventarc triggers list --location us-central1
L'output dovrebbe essere simile al seguente:
NAME: trigger-storage-workflows-tf
TYPE: google.cloud.storage.object.v1.finalized
DESTINATION: Workflows: storage-workflow-tf
ACTIVE: Yes
LOCATION: us-central1
Generare e visualizzare un evento
Puoi generare un evento e confermare che il trigger Eventarc funzioni come previsto.
Cloud Run
Per generare un evento:
Carica un file di testo in Cloud Storage:
echo "Hello World" > random.txt gsutil cp random.txt gs://trigger-cloudrun-PROJECT_ID/random.txt
Il caricamento genera un evento e il servizio Cloud Run registra il messaggio dell'evento.
Per verificare la ricezione di un evento:
- Visualizza le voci di log relative agli eventi create dal tuo servizio:
gcloud logging read "resource.type=cloud_run_revision \ AND resource.labels.service_name=hello-events"
In alternativa, apri la console Google Cloud, accedi alla risorsa Cloud Run e visualizza i log.
- Cerca una voce di log simile alla seguente:
Received event of type google.cloud.storage.object.v1.finalized. Event data: { "kind": "storage#object", "id": "trigger-cloudrun-PROJECT_ID/random.txt", ...}
GKE
Per generare un evento:
Carica un file di testo in Cloud Storage:
echo "Hello World" > random.txt gsutil cp random.txt gs://trigger-gke-PROJECT_ID/random.txt
Il caricamento genera un evento e il servizio Cloud Run registra il messaggio dell'evento.
Per verificare la ricezione di un evento:
Trova l'ID pod:
POD_NAME=$(kubectl get pods -o custom-columns=":metadata.name" --no-headers)
Questo comando utilizza l'output formattato di
kubectl
.Controlla i log del pod:
kubectl logs $POD_NAME
Cerca una voce di log simile alla seguente:
{"severity":"INFO","eventType":"google.cloud.pubsub.topic.v1.messagePublished", "message":"Received event of type google.cloud.pubsub.topic.v1.messagePublished.", [...]}
Workflows
Per generare un evento:
Carica un file di testo in Cloud Storage:
echo "Hello World" > random.txt gsutil cp random.txt gs://trigger-workflows-PROJECT_ID/random.txt
Il caricamento genera un evento e il servizio Cloud Run registra il messaggio dell'evento.
Per verificare la ricezione di un evento:
Verifica che l'esecuzione di un flusso di lavoro venga attivata elencando le ultime cinque esecuzioni:
gcloud workflows executions list storage-workflow-tf --limit=5
L'output deve includere un elenco di esecuzioni con
NAME
,START_TIME
,END_TIME
eSTATUS
.Visualizza i risultati dell'esecuzione più recente:
EXECUTION_NAME=$(gcloud workflows executions list storage-workflow-tf --limit=1 --format "value(name)") gcloud workflows executions describe $EXECUTION_NAME
Verifica che l'output sia simile al seguente:
... result: '"Received event google.cloud.storage.object.v1.finalized - trigger-workflows-PROJECT_ID, random.txt"' state: SUCCEEDED ...
Cerca
state: SUCCEEDED
eresult: "Received event"
nell'output dei flussi di lavoro.
Esegui la pulizia
Rimuovi le risorse applicate in precedenza alla configurazione Terraform eseguendo il comando seguente e inserendo yes
alla richiesta:
terraform destroy
Puoi anche eliminare il tuo progetto Google Cloud per evitare addebiti. L'eliminazione del progetto Google Cloud interrompe la fatturazione per tutte le risorse utilizzate all'interno del progetto.
- 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.
Passaggi successivi
- Per attivare un flusso di lavoro con eventi utilizzando l'interfaccia a riga di comando o la console gcloud, consulta Attivare un flusso di lavoro con eventi o messaggi Pub/Sub