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
- Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Abilita le API Cloud Resource Manager e Identity and Access Management (IAM).
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo dei servizi (
roles/serviceusage.serviceUsageAdmin), che include l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.-
Nella console Google Cloud , attiva Cloud Shell.
Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installata e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.
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 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 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ù, 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 il account di servizio, consenti a Eventarc di gestire i cluster GKE:
Crea l'account di servizio:
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ù, 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 Pub/Sub Publisher (roles/pubsub.publisher) al service agent 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.
Se non hai mai creato un trigger 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à 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-central1Crea un deployment denominato
hello-gke:kubectl create deployment hello-gke \ --image=us-docker.pkg.dev/cloudrun/container/helloEsporre il deployment come servizio Kubernetes:
kubectl expose deployment hello-gke \ --type ClusterIP --port 80 --target-port 8080Assicurati che il pod sia in esecuzione:
kubectl get podsL'output dovrebbe essere simile al seguente:
NAME READY STATUS RESTARTS AGE hello-gke-5b6574b4db-rzzcr 1/1 Running 0 2m45sSe
STATUSèPendingoContainerCreating, 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 svcL'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:
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.
Inizializza Terraform. Devi eseguire 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 il seguente comando e inserendo
yesal prompt:terraform apply
Attendi che Terraform visualizzi il messaggio "Apply complete!".
Verifica la creazione delle risorse
Cloud Run
Verifica che il servizio sia stato creato:
gcloud run services list --region us-central1Verifica che il trigger sia stato creato:
gcloud eventarc triggers list --location us-central1L'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-gkeVerifica che il trigger sia stato creato:
gcloud eventarc triggers list --location us-central1L'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-central1Verifica che il trigger Eventarc sia stato creato:
gcloud eventarc triggers list --location us-central1L'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 il trigger Eventarc funzioni come previsto.
Recupera il nome del bucket Cloud Storage che hai creato in precedenza:
gcloud storage lsCarica un file di testo nel bucket Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://BUCKET_NAME/random.txtSostituisci
BUCKET_NAMEcon il nome del bucket Cloud Storage recuperato nel passaggio precedente. Ad esempio:gcloud storage cp random.txt gs://BUCKET_NAME/random.txtIl 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 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_NAMECerca 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=5L'output deve includere un elenco di esecuzioni con
NAME,STATE,START_TIMEeEND_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_NAMEVerifica 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 comando seguente e inserendo yes al prompt:
terraform destroy
Puoi anche eliminare il tuo progetto Google Cloud per evitare addebiti. L'eliminazione del tuo progetto Google Cloud interrompe la fatturazione per tutte le risorse utilizzate al suo interno.
- Nella console Google Cloud , vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona quello che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.