Understand Eventarc locations

Each event source, event target, and Eventarc trigger has its own ___location. Sometimes, these locations must match; at other times, they can be different. For more information, see Eventarc locations.

Source ___location

The ___location of the event source often dictates the trigger ___location. In the following example, since the Cloud Storage bucket is in the europe-west1 region, the trigger must also be located 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

Target ___location

When deploying your event target (for example, a Cloud Run service), you choose a supported region as its ___location. Typically, for latency and data locality reasons, you want this to be in the same region as your event source. However, it is not a requirement and in the preceding example, the event source is in europe-west1 while the --destination-run-region flag indicates that the event target is in us-central1.

Trigger ___location

Additionally, the type of Eventarc trigger you create impacts the ___location of the trigger which is specified through the --___location flag:

Cloud Audit Logs

Using Cloud Audit Logs triggers, you can connect any event source that emits audit logs to an event target. Cloud Audit Logs triggers are available in single-region locations and you can also create a global Eventarc trigger; however, triggers are not supported in dual-region and multi-region locations.

The ___location of the event source dictates the trigger ___location. Typically, this is a single-region ___location. For example, to capture Cloud Storage events from a bucket in the europe-west1 region with an audit logs trigger, create a trigger in the same ___location:

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

As there's no filtering by bucket when you use a Cloud Audit Logs trigger, this will match all buckets in the europe-west1 region. (To filter by bucket, you can instead use a direct Cloud Storage trigger.)

Or, to match a dual-region or multi-region bucket such as eu, you can create a trigger with a global ___location and this will match all buckets in all regions for which the event filters match:

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 triggers respond to events inside a Cloud Storage bucket—object creation, deletion, archiving, and metadata updates. Cloud Storage triggers are available in single-region, dual-region, and multi-region locations; you cannot create a global Eventarc trigger.

The ___location of the Cloud Storage bucket dictates the ___location of the Eventarc trigger, and they must match. In the following example, the trigger ___location matches that of the Cloud Storage bucket (the eu multi-region ___location):

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

If the bucket and trigger regions don't match, you will see an error similar to the following:

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

A Pub/Sub trigger connects a Pub/Sub topic to an event target. Pub/Sub triggers are only available in single-region locations and you cannot create a global Eventarc trigger.

Although Pub/Sub topics are global and not tied to a single region, when you create a Pub/Sub trigger, you must specify a region for it using the --___location flag:

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 configures geofencing so that Pub/Sub events persist only in the specified ___location. You can also use regional Pub/Sub service endpoints to publish to the topic so that all of the data stays in a single region.

What's next

  • To learn how to route events across Google Cloud projects, see the tutorial.