1. Introduzione

Cloud Run consente di eseguire container stateless in un ambiente completamente gestito. È basato su Knative open source, che ti consente di scegliere se eseguire i container in maniera completamente gestita con Cloud Run o nel tuo cluster Google Kubernetes Engine con Cloud Run for Anthos.

Eventarc semplifica la connessione di vari servizi (Cloud Run, Cloud Functions, Workflows) con eventi provenienti da diverse origini. Consente di creare architetture basate su eventi in cui i microservizi sono a basso accoppiamento e distribuiti. Si occupa anche dell'importazione, della distribuzione, della sicurezza, dell'autorizzazione e della gestione degli errori degli eventi, il che migliora l'agilità degli sviluppatori e la resilienza delle applicazioni.
In questo codelab, imparerai a utilizzare Eventarc. Più nello specifico, ascolterai gli eventi di Pub/Sub, Cloud Storage e Cloud Audit Logs con Eventarc e li trasmetterai a un servizio Cloud Run.
Obiettivi didattici
- Visione di Eventarc
- Scopri gli eventi in Eventarc
- Crea un sink Cloud Run
- Crea un trigger per Pub/Sub
- Crea un trigger per Cloud Storage
- Crea un trigger per Cloud Audit Logs
- Esplora la UI di Eventarc
2. Visione di Eventarc
Eventarc ha lo scopo di distribuire eventi da varie origini di eventi Google, Google Cloud e di terze parti alle destinazioni degli eventi Google Cloud.

Origini Google Cloud | Origini eventi che sono prodotti di proprietà di Google Cloud |
Fonti Google | Origini eventi che sono prodotti di proprietà di Google, come Gmail, Hangouts, Android Management e altri |
Fonti personalizzate | Origini eventi che non sono prodotti di proprietà di Google e che vengono create dagli utenti finali |
Origini di terze parti | Origini eventi che non sono di proprietà di Google né prodotte dal cliente. Sono incluse origini eventi popolari come Check Point CloudGuard, Datadog, ForgeRock, Lacework e altre ancora, di proprietà e gestite da fornitori e partner di terze parti. |
Gli eventi vengono normalizzati nel formato CloudEvents v1.0 per l'interoperabilità tra i servizi. CloudEvents è una specifica aperta indipendente dal fornitore che descrive i dati sugli eventi in formati comuni, consentendo l'interoperabilità tra servizi, piattaforme e sistemi.
3. Configurazione e requisiti
Configurazione dell'ambiente autonomo
- Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.



- Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google e puoi aggiornarla in qualsiasi momento.
- L'ID progetto deve essere univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). Cloud Console genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (che in genere è identificato come
PROJECT_ID), quindi, se non ti piace, generane un altro casuale oppure puoi provare il tuo e vedere se è disponibile. Viene "congelato" dopo la creazione del progetto. - Esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. L'esecuzione di questo codelab non dovrebbe costare molto, se non nulla. Per arrestare le risorse in modo da non incorrere in costi di fatturazione al termine di questo tutorial, segui le istruzioni di "pulizia" riportate alla fine del codelab. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.
Avvia Cloud Shell
Sebbene Google Cloud possa essere gestito da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.
Nella console GCP, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:

Bastano pochi istanti per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere un risultato simile a questo:

Questa macchina virtuale è caricata con tutti gli strumenti per sviluppatori di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Tutto il lavoro di questo lab può essere svolto semplicemente con un browser.
Prima di iniziare
In Cloud Shell, assicurati che l'ID progetto sia configurato:
PROJECT_ID=your-project-id gcloud config set project $PROJECT_ID
4. Esegui il deployment di un servizio Cloud Run
Esegui il deployment di un servizio Cloud Run per ricevere eventi. Eseguirai il deployment del container Hello di Cloud Run che registra i contenuti di CloudEvents.
Innanzitutto, abilita i servizi richiesti per Cloud Run:
gcloud services enable run.googleapis.com
Esegui il deployment del container hello in Cloud Run:
REGION=us-central1 SERVICE_NAME=hello gcloud run deploy $SERVICE_NAME \ --allow-unauthenticated \ --image=gcr.io/cloudrun/hello \ --region=$REGION
Se l'operazione riesce, la riga di comando visualizza l'URL del servizio. Puoi aprire l'URL del servizio in qualsiasi finestra del browser per verificare che il servizio sia stato implementato.
5. Event Discovery
Prima di creare trigger in Eventarc, puoi scoprire quali sono le origini eventi, i tipi di eventi che possono emettere e come configurare i trigger per utilizzarli.
Per visualizzare l'elenco dei diversi tipi di eventi:
gcloud beta eventarc attributes types list NAME DESCRIPTION google.cloud.audit.log.v1.written Cloud Audit Log written google.cloud.pubsub.topic.v1.messagePublished Cloud Pub/Sub message published google.cloud.storage.object.v1.archived Cloud Storage: Sent when a live version of an (object versioned) object is archived or deleted. google.cloud.storage.object.v1.deleted Cloud Storage: Sent when an object has been permanently deleted. google.cloud.storage.object.v1.finalized Cloud Storage: Sent when a new object (or a new generation of an existing object). google.cloud.storage.object.v1.metadataUpdated Cloud Storage: Sent when the metadata of an existing object changes.
Per saperne di più su ciascun tipo di evento:
gcloud beta eventarc attributes types describe google.cloud.audit.log.v1.written attributes: type,serviceName,methodName,resourceName description: 'Cloud Audit Log: Sent when a log is written.' name: google.cloud.audit.log.v1.written
Per visualizzare l'elenco dei servizi che generano un determinato tipo di evento:
gcloud beta eventarc attributes service-names list --type=google.cloud.audit.log.v1.written SERVICE_NAME DISPLAY_NAME accessapproval.googleapis.com Access Approval accesscontextmanager.googleapis.com Access Context Manager admin.googleapis.com Google Workspace Admin aiplatform.googleapis.com AI Platform (under Vertex AI) apigee.googleapis.com Apigee apigeeconnect.googleapis.com Apigee Connect ... workflows.googleapis.com Workflows
Per visualizzare l'elenco dei nomi dei metodi (sottoeventi) che ogni servizio può emettere:
gcloud beta eventarc attributes method-names list --type=google.cloud.audit.log.v1.written --service-name=workflows.googleapis.com METHOD_NAME google.cloud.workflows.v1.Workflows.CreateWorkflow google.cloud.workflows.v1.Workflows.DeleteWorkflow google.cloud.workflows.v1.Workflows.GetWorkflow google.cloud.workflows.v1.Workflows.ListWorkflows google.cloud.workflows.v1.Workflows.UpdateWorkflow google.cloud.workflows.v1beta.Workflows.CreateWorkflow google.cloud.workflows.v1beta.Workflows.DeleteWorkflow google.cloud.workflows.v1beta.Workflows.GetWorkflow google.cloud.workflows.v1beta.Workflows.ListWorkflows google.cloud.workflows.v1beta.Workflows.UpdateWorkflow
6. Crea un trigger Pub/Sub
Un modo per ricevere eventi è tramite Cloud Pub/Sub. Qualsiasi applicazione può pubblicare messaggi su Pub/Sub e questi messaggi possono essere inviati a Cloud Run tramite Eventarc.
Configurazione
Prima di creare trigger, attiva i servizi richiesti per Eventarc:
gcloud services enable eventarc.googleapis.com
Devi anche avere un service account da utilizzare con i trigger. Crea un service account:
SERVICE_ACCOUNT=eventarc-trigger-sa gcloud iam service-accounts create $SERVICE_ACCOUNT
Crea
Crea un trigger per filtrare gli eventi pubblicati nell'argomento Pub/Sub nel nostro servizio Cloud Run di cui è stato eseguito il deployment:
TRIGGER_NAME=trigger-pubsub gcloud eventarc triggers create $TRIGGER_NAME \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Test
Il trigger Pub/Sub crea un argomento in modo implicito. Scopriamolo e assegniamolo a una variabile:
TOPIC_ID=$(gcloud eventarc triggers describe $TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')
Utilizza gcloud per pubblicare un messaggio nell'argomento:
gcloud pubsub topics publish $TOPIC_ID --message="Hello World"
Il servizio Cloud Run registra il corpo del messaggio in entrata. Puoi visualizzarlo nella sezione Log dell'istanza Cloud Run:

Crea con un argomento Pub/Sub esistente
Per impostazione predefinita, quando crei un trigger Pub/Sub, Eventarc crea un argomento sottostante da utilizzare come argomento di trasporto tra l'applicazione e un servizio Cloud Run. Questa opzione è utile per creare facilmente e rapidamente un trigger supportato da Pub/Sub, ma a volte potresti voler utilizzare un argomento esistente. Eventarc ti consente di specificare un argomento Pub/Sub esistente nello stesso progetto con il flag --transport-topic gcloud.
Per vedere come funziona, crea un argomento Pub/Sub da utilizzare come argomento di trasporto:
TOPIC_ID=eventarc-topic gcloud pubsub topics create $TOPIC_ID
Crea un trigger:
TRIGGER_NAME=trigger-pubsub-existing gcloud eventarc triggers create $TRIGGER_NAME \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --location=$REGION \ --transport-topic=projects/$PROJECT_ID/topics/$TOPIC_ID \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Puoi testare il trigger inviando un messaggio all'argomento:
gcloud pubsub topics publish $TOPIC_ID --message="Hello again"
7. Crea un trigger Cloud Storage
In questo passaggio, creerai un trigger per rilevare gli eventi da Cloud Storage.
Configurazione
Per prima cosa, crea un bucket da cui ricevere gli eventi:
BUCKET_NAME=eventarc-gcs-$PROJECT_ID gsutil mb -l $REGION gs://$BUCKET_NAME
Concedi il ruolo eventarc.eventReceiver, in modo che il service account possa essere utilizzato in un trigger Cloud Storage:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/eventarc.eventReceiver \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Per i trigger Cloud Storage, devi anche aggiungere il ruolo pubsub.publisher al service account Cloud Storage:
SERVICE_ACCOUNT_STORAGE=$(gsutil kms serviceaccount -p $PROJECT_ID)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$SERVICE_ACCOUNT_STORAGE \
--role roles/pubsub.publisher
Crea
Crea un trigger per indirizzare gli eventi di creazione di nuovi file dal bucket al tuo servizio:
TRIGGER_NAME=trigger-storage gcloud eventarc triggers create $TRIGGER_NAME \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=$BUCKET_NAME" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Test
Elenca tutti i trigger per confermare che il trigger è stato creato correttamente:
gcloud eventarc triggers list
Carica un file nel bucket Cloud Storage:
echo "Hello World" > random.txt gsutil cp random.txt gs://$BUCKET_NAME/random.txt
Se controlli i log del servizio Cloud Run in Cloud Console, dovresti visualizzare l'evento ricevuto:

8. Crea un trigger Cloud Audit Logs
Sebbene il trigger Cloud Storage sia il modo migliore per rilevare gli eventi di Cloud Storage, in questo passaggio crei un trigger Cloud Audit Logs per fare la stessa cosa.
Configurazione
Per ricevere eventi da un servizio, devi attivare Cloud Audit Logs. Nella console Cloud, seleziona IAM & Admin e Audit Logs dal menu in alto a sinistra. Nell'elenco dei servizi, seleziona Google Cloud Storage:

Sul lato destro, assicurati che Admin, Read e Write siano selezionati e fai clic su Save:

Crea
Crea un trigger per indirizzare gli eventi di creazione di nuovi file dal bucket al tuo servizio:
TRIGGER_NAME=trigger-auditlog-storage gcloud eventarc triggers create $TRIGGER_NAME\ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET_NAME/objects/*" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Test
L'inizializzazione dei trigger degli audit log richiede un po' di tempo. Puoi verificare che il trigger sia stato creato elencando tutti i trigger:
gcloud eventarc triggers list
Dovresti vedere che il campo ACTIVE è Yes:
NAME TYPE DESTINATION ACTIVE trigger-auditlog-storage google.cloud.audit.log.v1.written Cloud Run service: hello Yes
Carica lo stesso file nel bucket Cloud Storage come hai fatto in precedenza:
gsutil cp random.txt gs://$BUCKET_NAME/random.txt
Se controlli i log del servizio Cloud Run in Cloud Console, dovresti visualizzare l'evento ricevuto:

9. Esplora la UI di Eventarc
In questo passaggio esplorerai la UI di Eventarc nella console Google Cloud. Nell'interfaccia utente di Eventarc, puoi visualizzare una panoramica di tutti i trigger, modificarli ed eliminarli e crearne di nuovi dalla console Google Cloud.
Vai alla sezione Eventarc di Google Cloud:

Vedrai l'elenco dei trigger che hai creato in precedenza:

Se fai clic su un trigger, puoi visualizzarne i dettagli, modificarlo o eliminarlo:

Puoi anche creare un nuovo attivatore selezionando Create trigger e compilando i dettagli dell'attivatore:

10. Complimenti!
Congratulazioni per aver completato il codelab.
Argomenti trattati
- Visione di Eventarc
- Scopri gli eventi in Eventarc
- Crea un sink Cloud Run
- Crea un trigger per Pub/Sub
- Crea un trigger per Cloud Storage
- Crea un trigger per Cloud Audit Logs
- Esplora la UI di Eventarc