Attiva Cloud Run con eventi Eventarc

1. Introduzione

894762ebb681671c.png

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.

cb762f29e9183a3f.png

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.

59b147dc030b2b0b.png

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

  1. 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.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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.
  1. 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:

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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:

69e0177e04a0d1af.png

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:

904cfc93bb8e8df1.png

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:

3c654597faed237c.png

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

1deb3ad78f11dd5f.png

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:

7be7859bcc8976f8.png

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:

81e139f17e0d29bf.png

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

3240c7c830398718.png

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

b4d8bbc6601a8b9e.png

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

3ee290ec72f130d5.png

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