Mit Eventarc können Sie Ereignisse über Google Cloud Dienste hinweg weiterleiten und gleichzeitig Datenstandort und Verarbeitungslatenz verwalten. Jeder Ereignis-Workflow umfasst drei Standortdimensionen: die Ereignisquelle, aus der das Ereignis stammt, den Eventarc-Trigger, der das Routing verwaltet, und das Ziel, das die Nutzlast verarbeitet.
Ziele können sich in anderen Regionen als die Quelle befinden. Die Standortanforderungen für Trigger hängen jedoch von Ihrem Ereignisanbieter ab.
Weitere Informationen finden Sie unter Eventarc-Standorte.
Quellort
Der Standort der Ereignisquelle bestimmt häufig den Triggerstandort. Im folgenden Beispiel muss sich der Cloud Storage-Bucket in der Region europe-west1 befinden, außerdem muss sich der Trigger in europe-west1 befinden.
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
Zielregion
Beim Bereitstellen des Ereignisziels (z. B. eines Cloud Run-Dienstes) wählen Sie eine unterstützte Region als Standort aus. Aus Latenz- und Datenlokalitätsgründen sollte dies in der Regel in derselben Region wie Ihre Ereignisquelle liegen.
Dies ist jedoch nicht zwingend erforderlich. Im vorherigen Beispiel befindet sich die Ereignisquelle in europe-west1, während das Flag --destination-run-region angibt, dass sich das Ereignisziel in us-central1 befindet.
Triggerstandort
Außerdem wirkt sich der Typ des Eventarc-Triggers, den Sie erstellen, auf den Speicherort des Triggers aus, der über das Flag ‑‑location angegeben wird:
Cloud-Audit-Logs
Mit Cloud-Audit-Log-Triggern können Sie jede Ereignisquelle, die Audit-Logs ausgibt, mit einem Ereignisziel verbinden. Cloud-Audit-Logs-Trigger sind an Standorten mit einer Region verfügbar. Sie können auch einen globalen Eventarc-Trigger erstellen. Trigger werden jedoch an Standorten mit zwei oder mehreren Regionen nicht unterstützt.
Der Speicherort der Ereignisquelle bestimmt den Triggerstandort. In der Regel ist dies ein Standort mit einer einzigen Region. Wenn Sie beispielsweise Cloud Storage-Ereignisse aus einem Bucket in der Region europe-west1 mit einem Audit-Log-Trigger erfassen möchten, erstellen Sie einen Trigger am selben Standort:
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
Da Sie keinen Bucket nach Filter filtern, wenn Sie einen Cloud-Audit-Log-Trigger verwenden, werden alle Buckets in der Region europe-west1 abgeglichen. Zum Filtern nach Bucket können Sie stattdessen einen direkten Cloud Storage-Trigger verwenden.
Für einen Bucket mit zwei Regionen oder einem multiregionalen Standort wie eu können Sie alternativ einen Trigger mit dem Standort global erstellen. Dieser stimmt mit allen Buckets in allen Regionen überein, mit denen der Ereignisfilter übereinstimmt:
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
Cloud Storage-Trigger reagieren auf Ereignisse in einem Cloud Storage-Bucket – Objekterstellung, Löschung, Archivierung und Metadatenaktualisierungen. Cloud Storage-Trigger sind an Standorten mit einer Region, mit zwei Regionen und mit mehreren Regionen verfügbar. Sie können keinen globalen Eventarc-Trigger erstellen.
Der Standort des Eventarc-Triggers legt den Speicherort des Cloud Storage-Buckets fest und muss übereinstimmen. Im folgenden Beispiel entspricht der Triggerspeicherort dem des Cloud Storage-Buckets (dem multiregionalen Standort 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
Wenn die Bucket- und Triggerregionen nicht übereinstimmen, wird ein Fehler wie der folgende angezeigt:
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
Ein Pub/Sub-Trigger verbindet ein Pub/Sub-Thema mit einem Ereignisziel. Pub/Sub-Trigger sind nur an Standorten mit einer einzelnen Region verfügbar und Sie können keinen globalen Eventarc-Trigger erstellen.
Pub/Sub-Themen sind global und sind nicht an eine einzelne Region gebunden. Beim Erstellen eines Pub/Sub-Triggers müssen Sie jedoch mit dem Flag --location eine Region dafür angeben:
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 konfiguriert Geofencing so, dass Pub/Sub-Ereignisse nur am angegebenen Standort gespeichert werden. Sie können auch regionale Pub/Sub-Dienstendpunkte verwenden, um Daten im Thema zu veröffentlichen, damit alle Daten in einer einzigen Region verbleiben.
Multiregionale Bereitstellungen und Nachrichtenduplizierung
Wenn Sie einen Eventarc-Trigger für ein Pub/Sub-Thema erstellen, erstellt Eventarc automatisch ein eindeutiges zugrunde liegendes Pub/Sub-Abo für diesen bestimmten Trigger. So kann Eventarc den Lebenszyklus, die Berechtigungen und die Einhaltung der Anforderungen an den Datenstandort des Abos verwalten.
Wenn Sie identische Trigger in mehreren Regionen bereitstellen, die auf dasselbe globale Pub/Sub-Thema verweisen, fungiert jeder Trigger als separater Abonnent. Da Pub/Sub Nachrichten an alle aktiven Abos sendet (Fan-out), empfangen und verarbeiten Ihre Dienste in allen Regionen dieselbe Nachricht, was zu Duplikaten führt.
Wenn Sie eine multiregionale Bereitstellung ohne Nachrichtenduplizierung erreichen möchten, können Sie die Ereignisaufnahme von der regionalen Verarbeitung entkoppeln. Erstellen Sie einen einzelnen Eventarc-Trigger in einer einzelnen Region und konfigurieren Sie den Trigger so, dass er auf einen globalen externen Application Load Balancer verweist. Konfigurieren Sie dann den Load Balancer so, dass der Traffic an Ihre regionalen Backends weitergeleitet wird, z. B. an Cloud Run-Dienste in mehreren Regionen.
So wird sichergestellt, dass Nachrichten genau einmal an den Load-Balancer gesendet werden, der die Ereignisse dann auf die Regionen verteilt. Der Trigger bleibt regional, um die Geofencing-Anforderungen zu erfüllen, das Ziel bietet jedoch eine globale Reichweite.
Unabhängig von Ihrer Architektur müssen Ihre Event-Handler idempotent sein, um potenzielle Duplikate zu verarbeiten, da Eventarc eine mindestens einmalige Ereignisübermittlung bietet.
Nächste Schritte
- Informationen zum Weiterleiten von Ereignissen in Google Cloud -Projekten finden Sie in der Anleitung.