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, per consentirti di scegliere di eseguire i container in modo completamente gestito 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, Workfklows) a eventi provenienti da una varietà di 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 per te, migliorando l'agilità degli sviluppatori e la resilienza delle applicazioni.

In questo codelab, imparerai a conoscere Eventarc. In particolare, ascolterai eventi da Pub/Sub, Cloud Storage e Cloud Audit Logs con Eventarc e li passerai a un servizio Cloud Run.

Cosa imparerai a fare

  • 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 Eventarc

2. Visione di Eventarc

Eventarc mira a fornire eventi da varie origini eventi Google, Google Cloud e di terze parti alle destinazioni degli eventi Google Cloud.

59b147dc030b2b0b.png

Origini Google Cloud

Origini evento 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 ancora

Origini personalizzate

Origini evento che non sono prodotti di proprietà di Google e sono create dagli utenti finali

Origini di terze parti

Origini eventi non di proprietà di Google né prodotte dai clienti. Sono incluse fonti di eventi popolari come Check Point CloudGuard, Datadog, ForgeRock, Lacework e così via, di proprietà e gestite da fornitori e partner di terze parti.

Gli eventi sono normalizzati nel formato CloudEvents v1.0 per l'interoperabilità tra servizi. CloudEvents è una specifica aperta indipendente dal fornitore che descrive i dati degli eventi in formati comuni, consentendo l'interoperabilità tra servizi, piattaforme e sistemi.

3. Configurazione e requisiti

Configurazione dell'ambiente da seguire in modo 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 progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google e può essere aggiornata 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). La console Cloud genera automaticamente una stringa univoca. di solito non ti importa cosa sia. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (che solitamente è identificato come PROJECT_ID), quindi, se non ti piace, generane un altro a caso oppure puoi fare un tentativo personalizzato e controllare se è disponibile. Poi c'è "congelato" dopo la creazione del progetto.
  • C'è un terzo valore, il numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
  1. Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare le risorse/le API Cloud. Eseguire questo codelab non dovrebbe costare molto. Per arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial, segui eventuali "pulizie" istruzioni riportate alla fine del codelab. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.

Avvia Cloud Shell

Anche se Google Cloud può essere utilizzato da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.

Dalla console di Google Cloud, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:

55efc1aaa7a4d3ad.png

Dovrebbe richiedere solo qualche istante per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere una schermata simile al seguente:

7ffe5cbb04455448.png

Questa macchina virtuale viene caricata con tutti gli strumenti di sviluppo necessari. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Tutto il lavoro in questo lab può essere svolto semplicemente con un browser.

Prima di iniziare

All'interno di 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

Eseguire 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 sia stato eseguito il deployment del servizio.

5. scoperta evento

Prima di creare trigger in Eventarc, puoi scoprire quali sono le origini eventi, i tipi di eventi che possono emettere e come configurarne 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 ulteriori informazioni su ogni 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 emettono 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 (eventi secondari) 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 in Pub/Sub e questi messaggi possono essere consegnati a Cloud Run tramite Eventarc.

Configurazione

Prima di creare qualsiasi trigger, abilita i servizi richiesti per Eventarc:

gcloud services enable eventarc.googleapis.com

Devi anche avere un account di servizio che venga utilizzato dai trigger. Crea un account di servizio:

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 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 nascosto. Scopriamolo e assegniamo a una variabile:

TOPIC_ID=$(gcloud eventarc triggers describe $TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')

Usa 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 arrivo. Puoi visualizzarlo nella sezione Log della tua 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 sotto le coperte per consentirti di utilizzare come argomento di trasporto tra la tua applicazione e un servizio Cloud Run. Questo è utile per creare facilmente e rapidamente un trigger supportato da Pub/Sub, ma a volte potresti voler usare un argomento esistente. Eventarc consente di specificare un argomento Pub/Sub esistente nello stesso progetto con il flag gcloud --transport-topic.

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 attivatore:

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 di Cloud Storage

In questo passaggio creerai un trigger per ascoltare eventi da Cloud Storage.

Configurazione

Per prima cosa, crea un bucket per ricevere eventi da:

BUCKET_NAME=eventarc-gcs-$PROJECT_ID

gsutil mb -l $REGION gs://$BUCKET_NAME

Concedi il ruolo eventarc.eventReceiver in modo che l'account di servizio possa essere utilizzato in un trigger di Cloud Storage:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --role roles/eventarc.eventReceiver \
  --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Devi inoltre aggiungere il ruolo pubsub.publisher all'account di servizio Cloud Storage per i trigger di 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 instradare 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 sia 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 vedere l'evento ricevuto:

904cfc93bb8e8df1.png

8. Crea un trigger di Cloud Audit Logs

Sebbene il trigger di Cloud Storage sia il modo migliore per ascoltare gli eventi di Cloud Storage, in questo passaggio creerai un trigger di Cloud Audit Log per fare lo stesso.

Configurazione

Per ricevere eventi da un servizio, devi abilitare Cloud Audit Logs. Dalla console Cloud, seleziona IAM & Admin e Audit Logs dal menu in alto a sinistra. Nell'elenco dei servizi, controlla 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 instradare 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 venga creato elencando tutti gli attivatori:

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 nel bucket Cloud Storage lo stesso file che 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 vedere l'evento ricevuto:

7be7859bcc8976f8.png

9. Esplora la UI Eventarc

In questo passaggio esplorerai la UI di Eventarc nella console Google Cloud. Nella UI di Eventarc puoi visualizzare una panoramica di tutti i trigger, modificarli ed eliminarli, nonché creare nuovi trigger dalla console Google Cloud.

Vai alla sezione Eventarc di Google Cloud:

81e139f17e0d29bf.png

Viene visualizzato l'elenco degli attivatori che hai creato in precedenza:

3240c7c830398718.png

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

b4d8bbc6601a8b9e.png

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

3ee290ec72f130d5.png

10. Complimenti!

Complimenti 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 Eventarc