Eventarc のロケーションについて

イベントソース、イベント ターゲット、Eventarc トリガーにはそれぞれ独自のロケーションがあります。これらのロケーションが一致しなければならない場合と、そうでない場合があります。詳細については、Eventarc のロケーションをご覧ください。

ソースのロケーション

多くの場合、イベントソースのロケーションによってトリガーのロケーションが決まります。次の例では、Cloud Storage バケットが europe-west1 リージョンにあるため、トリガーも 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

ターゲットのロケーション

イベント ターゲット(Cloud Run サービスなど)をデプロイするときに、サポートされているリージョンをロケーションとして選択します。通常、レイテンシやデータの局所性の理由から、イベントソースと同じリージョンに配置するのが適切です。ただし、これは必須ではありません。上記の例では、イベントソースが europe-west1 にあり、--destination-run-region フラグでイベント ターゲットのロケーションが us-central1 に指定されています。

トリガーのロケーション

また、作成する Eventarc トリガーのタイプは、--location フラグで指定されたトリガーのロケーションに影響します。

Cloud Audit Logs

Cloud Audit Logs のトリガーを使用すると、監査ログを出力するイベントソースをイベント ターゲットに接続できます。Cloud Audit Logs トリガーは単一リージョンのロケーションで使用できます。グローバル Eventarc トリガーを作成することもできますが、デュアルリージョンとマルチリージョンのロケーションでトリガーはサポートされません。

イベントソースのロケーションによってトリガーのロケーションが決まります。通常、これは単一リージョンのロケーションです。たとえば、監査ログのトリガーを使用して、europe-west1 リージョンのバケットから Cloud Storage イベントをキャプチャするには、同じロケーションにトリガーを作成します。

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

Cloud Audit Logs トリガーを使用している場合はバケットでフィルタリングされないため、europe-west1 リージョン内のすべてのバケットと一致します(バケットでフィルタリングするには、代わりに Cloud Storage トリガーを直接使用します)。

また、eu などのデュアルリージョンまたはマルチリージョン バケットと一致するには、global のロケーションを指定してトリガーを作成します。これにより、イベント フィルタが一致するすべてのリージョンのすべてのバケットと一致します。

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 トリガーは、オブジェクトの作成、削除、アーカイブ、メタデータ更新など、Cloud Storage バケット内のイベントに応答します。Cloud Storage トリガーは、シングルリージョン、デュアルリージョン、マルチリージョンのロケーションで使用できますが、グローバル Eventarc トリガーは作成できません。

Cloud Storage バケットのロケーションによって、Eventarc トリガーのロケーションが決まります。これらは必ず一致している必要があります。次の例では、トリガーのロケーションは Cloud Storage バケット(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

バケットとトリガーのリージョンが一致しない場合、次のようなエラーが表示されます。

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

Pub/Sub トリガーは、Pub/Sub トピックをイベント ターゲットに接続します。Pub/Sub トリガーは単一リージョンのロケーションでのみ使用できます。グローバル Eventarc トリガーを作成することはできません。

Pub/Sub トピックはグローバルであり、単一リージョンに関連付けられていませんが、Pub/Sub トリガーを作成するときに、--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 は、Pub/Sub イベントが指定のロケーションでのみ保持されるようにジオフェンスを構成します。また、リージョンの Pub/Sub サービス エンドポイントを使用してトピックに公開することで、すべてのデータが単一リージョン内にとどまるようにすることもできます。

次のステップ

  • Google Cloud プロジェクト間でイベントをルーティングする方法については、チュートリアルをご覧ください。