Questo documento descrive come utilizzare Terraform e la risorsa google_eventarc_trigger
per creare attivatori Eventarc per le seguenti destinazioni: Google Cloud
Per ulteriori informazioni sull'utilizzo di Terraform, consulta la documentazione di Terraform su Google Cloud.
Gli esempi di codice in questa guida indirizzano gli eventi diretti da Cloud Storage, ma possono essere adattati a qualsiasi provider di eventi. Ad esempio, per scoprire come instradare gli eventi diretti da Pub/Sub a Cloud Run, consulta la guida introduttiva di Terraform.
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 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 è integrato nell'ambiente Cloud Shell e puoi utilizzare Cloud Shell per eseguire il deployment delle risorse Terraform senza dover installare Terraform.
Prepararsi a eseguire il deployment di Terraform
Prima di eseguire il deployment di qualsiasi risorsa Terraform, devi creare un file di configurazione Terraform. Un file di configurazione Terraform ti consente di definire lo stato finale preferito per l'infrastruttura utilizzando la sintassi di Terraform.
Prepara Cloud Shell
In Cloud Shell, imposta il progetto Google Cloud predefinito in cui vuoi applicare le configurazioni Terraform. Devi eseguire questo comando una sola volta per progetto e puoi farlo in qualsiasi directory:
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Sostituisci PROJECT_ID
con l'ID del tuo progetto Google Cloud.
Tieni presente che le variabili di ambiente vengono sostituite se imposti valori espliciti nel file di configurazione Terraform.
Prepara la directory
Ogni file di configurazione di Terraform deve avere una propria directory (detta anche modulo principale). In Cloud Shell, crea una directory e un nuovo file al suo interno:
mkdir DIRECTORY && cd DIRECTORY && touch main.tf
Il nome del file deve avere l'estensione .tf
. Ad esempio, in questo documento il file è indicato come main.tf
.
Definisci la configurazione Terraform
Copia gli esempi di codice Terraform applicabili nel file main.tf
appena creato. Se vuoi, puoi copiare il codice da GitHub. Questa procedura è consigliata quando lo snippet Terraform fa parte di una soluzione end-to-end.
In genere, applichi l'intera configurazione contemporaneamente. Tuttavia, puoi anche scegliere come target una risorsa specifica. Ad esempio:
terraform apply -target="google_eventarc_trigger.default"
Tieni presente che i sample di codice Terraform utilizzano l'interpolazione per le sostituzioni, ad esempio variabili di riferimento, attributi delle risorse e chiamate funzioni.
Abilita API
In genere, i sample di Terraform presuppongono che le API richieste siano abilitate nel progetto Google Cloud. Utilizza il seguente codice per abilitare le API:
Cloud Run
GKE
Workflow
Crea un account di servizio e configurane l'accesso
Ogni attivatore Eventarc è associato a un account di servizio IAM al momento della creazione. Utilizza il seguente codice per creare un account di servizio dedicato e concedere all'account di servizio gestito dall'utente ruoli Identity and Access Management specifici per gestire gli eventi:
Cloud Run
L'agente di servizio Pub/Sub viene creato automaticamente quando viene attivata l'API Pub/Sub. Se l'agente di servizio Pub/Sub è stato creato il giorno 8 aprile 2021 o in una data precedente e l'account di servizio non ha il ruolo Agente di servizio Cloud Pub/Sub (roles/pubsub.serviceAgent
), concedi all'agente di servizio il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator
). Per ulteriori informazioni, consulta
Creare e concedere ruoli agli agenti di servizio.
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
Prima di creare l'account di servizio, abilita Eventarc per gestire i cluster GKE:
Crea l'account di servizio:
Workflow
L'agente di servizio Pub/Sub viene creato automaticamente quando viene attivata l'API Pub/Sub. Se l'agente di servizio Pub/Sub è stato creato il giorno 8 aprile 2021 o in una data precedente e l'account di servizio non dispone del ruolo Agente di servizio Cloud Pub/Sub (roles/pubsub.serviceAgent
), concedi all'agente di servizio il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator
). Per ulteriori informazioni, consulta
Creare e concedere ruoli agli agenti di servizio.
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" }
Creare un bucket Cloud Storage come fornitore di eventi
Utilizza il seguente codice per creare un bucket Cloud Storage e concedi il ruolo Editore Pub/Sub (roles/pubsub.publisher
) all'agente di servizio Cloud Storage.
Cloud Run
GKE
Workflow
Crea un ricevitore di eventi da utilizzare come target dell'evento
Crea un destinatario di eventi utilizzando una delle seguenti risorse Terraform:
Cloud Run
Crea un servizio Cloud Run come destinazione evento per l' trigger Eventarc:
GKE
Per semplificare questa guida, crea un servizio Google Kubernetes Engine come destinazione degli eventi al di fuori di Terraform, tra l'applicazione delle configurazioni Terraform.
Se non hai mai creato un attivatore in questo progetto Google Cloud, esegui il seguente comando per creare l'agente di servizio Eventarc:
gcloud beta services identity create --service eventarc.googleapis.com
Crea un cluster GKE:
Esegui il deployment di un servizio Kubernetes su GKE che riceverà richieste HTTP e registrerà eventi utilizzando un'immagine Cloud Run predefinita,
us-docker.pkg.dev/cloudrun/container/hello
: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=us-docker.pkg.dev/cloudrun/container/hello
Esponi il deployment come servizio Kubernetes:
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 RESTARTS AGE hello-gke-5b6574b4db-rzzcr 1/1 Running 0 2m45s
Se
STATUS
èPending
oContainerCreating
, il pod è in fase di implementazione. 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.230.123 <none> 80/TCP 4m46s kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 14m
Workflow
Esegui il deployment di un flusso di lavoro che viene eseguito quando un oggetto viene aggiornato nel bucket Cloud Storage:
Definire un trigger Eventarc
Un trigger Eventarc instrada gli eventi da un provider di eventi a una destinazione di eventi. Utilizza la risorsa
google_eventarc_trigger
per specificare gli attributi CloudEvents in matching_criteria
e filtrare gli eventi. Per ulteriori informazioni, segui le istruzioni quando
crei un attivatore per un provider, un tipo di evento e una destinazione specifici.
Gli eventi che corrispondono a tutti i filtri vengono inviati alla destinazione.
Cloud Run
Crea un trigger Eventarc che inoltra gli eventi di Cloud Storage al servizio hello-event
Cloud Run.
GKE
Crea un trigger Eventarc che instrada gli eventi di Cloud Storage al servizio GKE hello-gke
.
Workflow
Crea un trigger Eventarc che inoltra gli eventi di Cloud Storage al flusso di lavoro denominato storage-workflow-tf
.
Applica Terraform
Utilizza l'interfaccia a riga di comando Terraform per eseguire il provisioning dell'infrastruttura in base al file di configurazione.
Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.
Inizializza Terraform. Devi eseguire questa operazione una sola volta per directory.
terraform init
Se vuoi, per utilizzare la versione più recente del provider Google, includi l'opzione
-upgrade
:terraform init -upgrade
Rivedi la configurazione e verifica che le risorse che Terraform sta per creare o aggiornare corrispondano alle tue aspettative:
terraform plan
Apporta le correzioni necessarie alla configurazione.
Applica la configurazione di Terraform eseguendo il seguente comando e inserendo
yes
al prompt:terraform apply
Attendi che Terraform mostri il messaggio "Applicazione completata".
Verifica la creazione delle risorse
Cloud Run
Verifica che il servizio sia stato creato:
gcloud run services list --region us-central1
Verifica 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
Verifica che il servizio sia stato creato:
kubectl get service hello-gke
Verifica che l'attivatore sia stato creato:
gcloud eventarc triggers list --location us-central1
L'output dovrebbe essere simile al seguente:
NAME: trigger-storage-gke-tf TYPE: google.cloud.storage.object.v1.finalized DESTINATION: GKE: hello-gke ACTIVE: Yes LOCATION: us-central1
Workflow
Verifica che il flusso di lavoro sia stato creato:
gcloud workflows list --location us-central1
Verifica che l'trigger Eventarc sia stato creato:
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 verificare che l'trigger Eventarc funzioni come previsto.
Recupera il nome del bucket Cloud Storage che hai creato in precedenza:
gcloud storage ls
Carica un file di testo nel bucket Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://BUCKET_NAME/random.txt
Sostituisci
BUCKET_NAME
con il nome del bucket Cloud Storage recuperato nel passaggio precedente. Ad esempio:gcloud storage cp random.txt gs://BUCKET_NAME/random.txt
Il caricamento genera un evento e il servizio di ricezione di eventi registra il messaggio dell'evento.
Verifica che venga ricevuto un evento:
Cloud Run
Filtra le voci di log create dal tuo servizio:
gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.storage.object.v1.finalized."'
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-BUCKET_NAME/random.txt", ...}
GKE
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.storage.object.v1.finalized","message": "Received event of type google.cloud.storage.object.v1.finalized. Event data: ...}
Workflow
Verifica che sia stata attivata un'esecuzione del flusso di lavoro elencando le ultime cinque esecuzioni:
gcloud workflows executions list storage-workflow-tf --limit=5
L'output deve includere un elenco di esecuzioni con
NAME
,STATE
,START_TIME
eEND_TIME
.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 - BUCKET_NAME, random.txt"' startTime: '2024-12-13T17:23:50.451316533Z' state: SUCCEEDED ...
Esegui la pulizia
Rimuovi le risorse applicate in precedenza con la configurazione Terraform eseguendo il seguente
comando e inserendo yes
al prompt:
terraform destroy
Puoi anche eliminare il 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.