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.