Ogni origine evento, target evento e trigger Eventarc ha una propria località. A volte, queste località devono corrispondere; altre volte, possono essere diverse. Per saperne di più, consulta Località Eventarc.
Posizione di origine
La località dell'origine evento spesso determina la località 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 del target evento (ad esempio, un servizio Cloud Run), scegli una regione supportata come località. In genere, per motivi di latenza e località dei dati, vuoi che si trovi nella stessa regione dell'origine evento.
Tuttavia, non è un requisito e nell'esempio precedente l'origine evento si trova in europe-west1, mentre il flag --destination-run-region indica che il target evento si trova in us-central1.
Località trigger
Inoltre, il tipo di trigger Eventarc che crei influisce sulla
località del trigger, che viene specificata tramite il
‑‑location flag:
Cloud Audit Logs
Utilizzando i trigger Cloud Audit Logs, puoi collegare qualsiasi origine evento che emette log di controllo a un target evento. I trigger Cloud Audit Logs sono disponibili in località a singola regione e puoi anche creare un trigger Eventarc globale; tuttavia, i trigger non sono supportati in località a due regioni e multiregionali.
La località dell'origine evento determina la località del trigger. In genere, si tratta di una località a singola regione. Ad esempio, per acquisire gli eventi Cloud Storage da un bucket nella regione europe-west1 con un trigger dei log di controllo, 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 un bucket a due regioni o multiregionale come eu, puoi creare un trigger con una località global e questo corrisponderà a tutti i bucket in tutte le regioni per cui corrispondono i filtri degli 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 singola regione, a due regioni e multiregionali; non puoi creare un trigger Eventarc globale.
La località del bucket Cloud Storage determina la località 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 un target evento. I trigger Pub/Sub sono disponibili solo in località a singola regione e non puoi creare un trigger Eventarc globale.
Sebbene gli argomenti Pub/Sub siano globali e non siano vincolati a una singola regione, quando crei un trigger Pub/Sub devi specificare una regione 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 gli endpoint di servizio Pub/Sub regionali per pubblicare l'argomento in modo che tutti i dati rimangano in una singola regione.
Deployment multiregionali e duplicazione dei messaggi
Quando crei un trigger Eventarc per un argomento Pub/Sub, Eventarc crea automaticamente una sottoscrizione Pub/Sub sottostante univoca per quel trigger specifico. In questo modo, Eventarc può gestire il ciclo di vita, le autorizzazioni e la conformità alla residenza dei dati della sottoscrizione.
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 disaccoppiare l'inserimento degli eventi dall'elaborazione regionale. Crea un singolo trigger Eventarc in una singola regione e configuralo in modo che punti a un bilanciatore del carico delle applicazioni esterno globale. Quindi, configura il bilanciatore del carico in modo che instradi il traffico ai backend regionali, ad esempio i servizi Cloud Run in più regioni.
Questo approccio garantisce che i messaggi vengano recapitati esattamente una volta al bilanciatore del carico, che poi distribuisce gli eventi tra le regioni. Sebbene il trigger rimanga regionale per soddisfare il geofencing, il target offre una copertura globale.
Indipendentemente dall'architettura, assicurati che i gestori di eventi siano idempotenti per gestire i potenziali duplicati, poiché Eventarc fornisce la consegna degli eventi "at-least-once" .
Passaggi successivi
- Per scoprire come instradare gli eventi tra i Google Cloud progetti, consulta il tutorial.