Questo documento descrive come utilizzare Terraform e la risorsa
google_eventarc_trigger
per creare trigger Eventarc per le seguenti destinazioni Google Cloud:
Per saperne di più sull'utilizzo di Terraform, consulta la documentazione 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 rapida 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.
-
Verify 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.
-
Verify 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.
Prima di creare il account di servizio, abilita Eventarc a gestire i cluster GKE:
Crea l'account di servizio:
Se non hai mai creato un trigger in questo progetto Google Cloud , esegui questo 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à gli 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
Esporre 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 deployment. 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
Inizializza Terraform. Devi effettuare questa operazione una sola volta per directory.
terraform init
(Facoltativo) Per utilizzare l'ultima versione del provider Google, includi l'opzione
-upgrade
:terraform init -upgrade
Rivedi la configurazione e verifica che le risorse che Terraform creerà o aggiornerà corrispondano alle tue aspettative:
terraform plan
Apporta le correzioni necessarie alla configurazione.
Applica la configurazione Terraform eseguendo questo comando e inserendo
yes
al prompt:terraform apply
Attendi che Terraform visualizzi il messaggio "Apply complete!" (Applicazione completata).
Verifica che il servizio sia stato creato:
gcloud run services list --region us-central1
Verifica che il trigger 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
Verifica che il servizio sia stato creato:
kubectl get service hello-gke
Verifica che il trigger 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
Verifica che il flusso di lavoro sia stato creato:
gcloud workflows list --location us-central1
Verifica che il 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
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 un evento sia stato ricevuto:
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 podcast:
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 un'esecuzione dei workflow 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
,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 ...
- 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.
Terraform è integrato nell'ambiente Cloud Shell e puoi utilizzare Cloud Shell per eseguire il deployment delle risorse Terraform senza dover installare Terraform.
Preparati 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 la tua infrastruttura utilizzando la sintassi 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 eseguirlo 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 la propria directory (chiamata anche modulo radice). In Cloud Shell, crea una directory e un nuovo file al suo interno:
mkdir DIRECTORY && cd DIRECTORY && touch main.tf
Il nome file deve avere l'estensione .tf
. Ad esempio, in questo documento il file viene chiamato main.tf
.
Definisci la configurazione Terraform
Copia gli esempi di codice Terraform applicabili nel file
main.tf
appena creato. (Facoltativo) Puoi copiare il codice da GitHub. Questa
opzione è 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 gli esempi di codice Terraform utilizzano l'interpolazione per sostituzioni come variabili di riferimento, attributi delle risorse e chiamate di funzioni.
Abilita API
Gli esempi di Terraform in genere presuppongono che le API richieste siano abilitate nel tuo progettoGoogle Cloud . Utilizza il seguente codice per abilitare le API:
Cloud Run
GKE
Workflow
Crea un account di servizio e configura il relativo accesso
Ogni trigger Eventarc è associato a un account di servizio IAM al momento della creazione del trigger. Utilizza il seguente codice per creare unaccount di serviziot dedicato e concedere alaccount di serviziot 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 l'API Pub/Sub è abilitata. Se l'agente di servizio Pub/Sub è stato
creato l'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 il
ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator
)
all'agente di servizio. Per saperne di più, vedi
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
Workflow
L'agente di servizio Pub/Sub viene creato automaticamente quando l'API Pub/Sub è abilitata. Se l'agente di servizio Pub/Sub è stato
creato l'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 il
ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator
)
all'agente di servizio. Per saperne di più, vedi
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 Publisher Pub/Sub (roles/pubsub.publisher
) all'agente di servizio Cloud Storage.
Cloud Run
GKE
Workflow
Crea un ricevitore di eventi come destinazione dell'evento
Crea un ricevitore di eventi utilizzando una delle seguenti risorse Terraform:
Cloud Run
Crea un servizio Cloud Run come destinazione evento per il trigger Eventarc:
GKE
Per semplificare questa guida, crea un servizio Google Kubernetes Engine come destinazione eventi al di fuori di Terraform, tra l'applicazione delle configurazioni Terraform.
Workflow
Esegui il deployment di un flusso di lavoro che viene eseguito quando un oggetto viene aggiornato nel bucket Cloud Storage:
Definisci un trigger Eventarc
Un trigger Eventarc indirizza 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 trigger per un fornitore, 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 indirizza gli eventi di Cloud Storage al servizio Cloud Run hello-event
.
GKE
Crea un trigger Eventarc che instrada gli eventi di Cloud Storage
al servizio GKE hello-gke
.
Workflow
Crea un trigger Eventarc che indirizza gli eventi di Cloud Storage al flusso di lavoro denominato storage-workflow-tf
.
Applica Terraform
Utilizza l'interfaccia a riga di comando di 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.
Verifica la creazione delle risorse
Cloud Run
GKE
Workflow
Generare e visualizzare un evento
Puoi generare un evento e verificare che il trigger Eventarc funzioni come previsto.
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 tuo Google Cloud progetto per evitare addebiti. L'eliminazione del progetto Google Cloud interrompe la fatturazione di tutte le risorse utilizzate al suo interno.