Eventarc-Standorte

Jede Ereignisquelle, jedes Ereignisziel und jeder Eventarc-Trigger hat einen eigenen Standort. Manchmal müssen diese Standorte übereinstimmen. Zu unterschiedlichen Zeiten können sie unterschiedlich sein. 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

Darüber hinaus wirkt sich der Typ des erstellten Eventarc-Triggers auf den Standort des Triggers aus, der über das ‑‑location Flag 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 einzigen Region verfügbar und Sie können auch einen globalen Eventarc-Trigger erstellen. Trigger werden jedoch nicht an biregionalen und multiregionalen Standorten 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-Bucket 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 ähnlich dem folgenden 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 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, damit Pub/Sub-Ereignisse nur am angegebenen Standort verbleiben. Sie können auch regionale Pub/Sub-Dienstendpunkte verwenden, um in dem Thema zu veröffentlichen, sodass alle Daten in einer einzigen Region bleiben.

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 Datenstandortrichtlinien 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 Duplizierungen 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 er Traffic an Ihre regionalen Back-Ends weiterleitet, z. B. an Cloud Run-Dienste in mehreren Regionen.

Mit diesem Ansatz werden Nachrichten genau einmal an den Load Balancer gesendet, der die Ereignisse dann auf die Regionen verteilt. Der Trigger bleibt regional, um Geofencing zu erfüllen, während das Ziel eine globale Reichweite bietet.

Unabhängig von Ihrer Architektur müssen Ihre Ereignishandler idempotent sein, um potenzielle Duplikate zu verarbeiten, da Eventarc Ereignisse mindestens einmal sendet.

Nächste Schritte

  • Informationen zum Weiterleiten von Ereignissen zwischen Google Cloud Projekten finden Sie in der Anleitung.