Informazioni sulle località Eventarc

Eventarc consente di instradare gli eventi tra i servizi Google Cloud gestendo la residenza dei dati e la latenza di elaborazione. Ogni flusso di lavoro degli eventi coinvolge tre dimensioni della posizione: l'origine dell'evento, il trigger Eventarc che gestisce il routing e la destinazione che elabora il payload.

Sebbene le destinazioni target possano trovarsi in regioni diverse dalla sorgente, i requisiti per le località del trigger dipendono dal tuo fornitore di eventi.

Per saperne di più, consulta Località Eventarc.

Posizione di origine

La posizione dell'origine evento spesso determina la posizione del trigger. Nell'esempio seguente, poiché il bucket Cloud Storage si trova nella regione europe-west1, anche il trigger deve trovarsi in europe-west1.

gcloud eventarc triggers create trigger-storage \
    --destination-run-service=hello \
    --destination-run-region=us-central1 \
    --location=europe-west1 \
    --event-filters="type=google.cloud.storage.object.v1.finalized" \
    --event-filters="bucket=my-bucket-in-europe-west1-region" \
    --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com

Località target

Quando esegui il deployment della destinazione evento (ad esempio, un servizio Cloud Run), scegli una regione supportata come località. In genere, per motivi di latenza e località dei dati, è consigliabile che si trovi nella stessa regione dell'origine eventi. Tuttavia, non è un requisito e nell'esempio precedente l'origine dell'evento si trova in europe-west1, mentre il flag --destination-run-region indica che la destinazione dell'evento si trova in us-central1.

Posizione del trigger

Inoltre, il tipo di trigger Eventarc che crei influisce sulla posizione del trigger, che viene specificata tramite il flag ‑‑location:

Cloud Audit Logs

Utilizzando i trigger di Cloud Audit Logs, puoi connettere qualsiasi origine eventi che emette log di controllo a una destinazione eventi. I trigger Cloud Audit Logs sono disponibili in località a regione singola e puoi anche creare un trigger Eventarc globale. Tuttavia, i trigger non sono supportati in località a due regioni e multiregionali.

La posizione dell'origine evento determina la posizione del trigger. In genere, si tratta di una località in una singola regione. Ad esempio, per acquisire eventi Cloud Storage da un bucket nella regione europe-west1 con un trigger di audit log, crea un trigger nella stessa località:

gcloud eventarc triggers create trigger-auditlog \
    --destination-run-service=hello \
    --destination-run-region=us-central1 \
    --location=europe-west1 \
    --event-filters="type=google.cloud.audit.log.v1.written" \
    --event-filters="serviceName=storage.googleapis.com" \
    --event-filters="methodName=storage.objects.create" \
    --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com

Poiché non è possibile filtrare per bucket quando utilizzi un trigger Cloud Audit Logs, questo corrisponderà a tutti i bucket nella regione europe-west1. Per filtrare per bucket, puoi invece utilizzare un trigger Cloud Storage diretto.

In alternativa, per trovare una corrispondenza con un bucket a due regioni o multiregionale come eu, puoi creare un trigger con una località global. In questo modo, verrà trovata una corrispondenza con tutti i bucket in tutte le regioni per cui corrispondono i filtri eventi:

gcloud eventarc triggers create trigger-storage \
    --destination-run-service=hello \
    --destination-run-region=us-central1 \
    --location=global \
    --event-filters="type=google.cloud.storage.object.v1.finalized" \
    --event-filters="bucket=my-bucket-in-europe-west1-region" \
    --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com

Cloud Storage

I trigger Cloud Storage rispondono agli eventi all'interno di un bucket Cloud Storage: creazione, eliminazione, archiviazione e aggiornamenti dei metadati degli oggetti. I trigger Cloud Storage sono disponibili in località a regione singola, a due regioni e multiregionali. Non puoi creare un trigger Eventarc globale.

La posizione del bucket Cloud Storage determina la posizione del trigger Eventarc e deve corrispondere. Nell'esempio seguente, la località del trigger corrisponde a quella del bucket Cloud Storage (la località multiregionale eu):

gcloud eventarc triggers create trigger-storage \
    --destination-run-service=hello \
    --destination-run-region=us-central1 \
    --location=eu \
    --event-filters="type=google.cloud.storage.object.v1.finalized" \
    --event-filters="bucket=my-bucket-in-eu-multi-region" \
    --service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com

Se le regioni del bucket e del trigger non corrispondono, viene visualizzato un errore simile al seguente:

ERROR: (gcloud.eventarc.triggers.create) INVALID_ARGUMENT: The request was
invalid: Bucket "my-bucket-in-eu-multi-region" location "eu" does not match
trigger location "europe-west1". Try again by creating the trigger in "eu".

Pub/Sub

Un trigger Pub/Sub collega un argomento Pub/Sub a una destinazione evento. I trigger Pub/Sub sono disponibili solo in località a una sola regione e non puoi creare un trigger Eventarc globale.

Sebbene gli argomenti Pub/Sub siano globali e non collegati a una singola regione, quando crei un trigger Pub/Sub, devi specificare una regione per il trigger utilizzando il flag --location:

gcloud eventarc triggers create trigger-pubsub \
    --destination-run-service=hello \
    --destination-run-region=us-central1 \
    --location=us-central1 \
    --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
    --transport-topic=projects/your-projectid/topics/your-topic

Eventarc configura il geofencing in modo che gli eventi Pub/Sub persistano solo nella località specificata. Puoi anche utilizzare endpoint di servizio Pub/Sub regionali per pubblicare nell'argomento in modo che tutti i dati rimangano in un'unica regione.

Deployment multiregionali e duplicazione dei messaggi

Quando crei un trigger Eventarc per un argomento Pub/Sub, Eventarc crea automaticamente una sottoscrizione Pub/Sub univoca e sottostante per quel trigger specifico. In questo modo, Eventarc gestisce il ciclo di vita, le autorizzazioni e la conformità alla residenza dei dati dell'abbonamento.

Se esegui il deployment di trigger identici in più regioni che puntano allo stesso argomento Pub/Sub globale, ogni trigger funge da sottoscrittore separato. Poiché Pub/Sub recapita i messaggi a tutte le sottoscrizioni attive (fan-out), i tuoi servizi in tutte le regioni riceveranno ed elaboreranno lo stesso messaggio, con conseguente duplicazione.

Per ottenere un deployment multiregionale senza duplicazione dei messaggi, puoi separare l'importazione degli eventi dall'elaborazione regionale. Crea un singolo trigger Eventarc in una singola regione e configura il trigger in modo che punti a un bilanciatore del carico delle applicazioni esterno globale. Dopodiché, configura il bilanciatore del carico per instradare il traffico ai backend regionali, ad esempio i servizi Cloud Run in più regioni.

Questo approccio garantisce che i messaggi vengano inviati esattamente una volta al bilanciatore del carico, che poi distribuisce gli eventi tra le regioni. Mentre il trigger rimane regionale per soddisfare il geofencing, il target offre una copertura globale.

Indipendentemente dall'architettura, assicurati che i gestori di eventi siano idempotenti per gestire potenziali duplicati, poiché Eventarc fornisce la consegna degli eventi "at-least-once".

Passaggi successivi

  • Per scoprire come instradare gli eventi tra i progetti Google Cloud , consulta il tutorial.