トリガーを作成する

Eventarc トリガーは、特定のイベントまたは一連のイベントに関心があることを宣言します。イベント ルーティングを構成するには、トリガーのフィルタ(イベントソースとターゲット Cloud Run サービスを含む)を指定します。

サービスへのリクエストは、Pub/Sub トピックに公開されたメッセージによって、トリガーのフィルタ条件に一致する監査ログが作成されたとき、または Cloud Storage バケット内のさまざまなイベント(オブジェクトの作成、削除、アーカイブ、メタデータの更新)に応答してトリガーされます。

トリガーを作成するには、gcloud コマンドライン ツールまたは Google Cloud Console を使用します。

gcloud を使用したトリガーの作成

トリガーを作成するには、必須フラグとオプションのフラグを指定して gcloud コマンドを実行します。

新しい Pub/Sub トピック

gcloud eventarc triggers create TRIGGER \
    --location=LOCATION \
    --destination-run-service=DESTINATION_RUN_SERVICE \
    --destination-run-region=DESTINATION_RUN_REGION \
    --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"

次のように置き換えます。

  • TRIGGER はトリガーの ID または完全修飾識別子です。
  • LOCATION は Eventarc トリガーのロケーションです。eventarc/location プロパティを設定することもできます(例: gcloud config set eventarc/location us-central1)。

    Eventarc 用の Pub/Sub トリガーは、単一リージョンのロケーションでのみ使用できます。グローバル Eventarc トリガーを作成することはできません。

  • DESTINATION_RUN_SERVICE は、トリガーのイベントを受信する Cloud Run サービスの名前です。トリガーのロケーションがグローバルである場合を除き、サービスはトリガーと同じリージョンに存在している必要があります。サービスはトリガーと同じプロジェクトに配置する必要があり、イベントが生成されるたびに、ルート URL パス(/)に送信された HTTP POST リクエストとしてイベントを受信します。
  • DESTINATION_RUN_REGION は、宛先の Cloud Run サービスがあるリージョンです。指定しない場合、サービスはトリガーと同じリージョンにあるとみなされます。

注:

  • --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" フラグは必須です。
  • 各トリガーには複数のイベント フィルタを指定できます。その場合は、--event-filters=[ATTRIBUTE=VALUE,...] フラグにカンマ区切りで指定する必要があります。さらにフィルタを追加するには、このフラグを繰り返し指定します。すべてのフィルタに一致するイベントのみが宛先に送信されます。ワイルドカードと正規表現はサポートされていません。
  • --destination-run-path フラグを使用して、トリガーのイベントが送信される宛先の Cloud Run サービスの相対パスを指定することもできます。
  • デフォルトでは、Eventarc 用に作成された Pub/Sub サブスクリプションはアクティビティに関係なく保持され、期限切れになりません。非アクティブ期間を変更するには、サブスクリプションの管理をご覧ください。

例:

  gcloud eventarc triggers create pubsub-trigger-new \
      --location=us-central1 \
      --destination-run-service=helloworld-events-pubsub \
      --destination-run-region=us-central1 \
      --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"

これにより、新しい Pub/Sub トピックと pubsub-trigger-new というトリガーが作成されます。

Eventarc トリガーを削除すると、そのトリガーによって作成された Pub/Sub トピックも削除されるため、トリガーによって作成された Pub/Sub トピックは再利用しないことをおすすめします。

既存の Pub/Sub トピック

gcloud eventarc triggers create TRIGGER \
    --location=LOCATION \
    --destination-run-service=DESTINATION_RUN_SERVICE \
    --destination-run-region=DESTINATION_RUN_REGION \
    --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
    --transport-topic=projects/PROJECT_ID/topics/TOPIC_NAME

次のように置き換えます。

  • TRIGGER はトリガーの ID または完全修飾識別子です。
  • LOCATION は Eventarc トリガーのロケーションです。eventarc/location プロパティを設定することもできます(例: gcloud config set eventarc/location us-central1)。

    Eventarc 用の Pub/Sub トリガーは、単一リージョンのロケーションでのみ使用できます。グローバル Eventarc トリガーを作成することはできません。

  • DESTINATION_RUN_SERVICE は、トリガーのイベントを受信する Cloud Run サービスの名前です。トリガーのロケーションがグローバルである場合を除き、サービスはトリガーと同じリージョンに存在している必要があります。サービスはトリガーと同じプロジェクトに配置する必要があり、イベントが生成されるたびに、ルート URL パス(/)に送信された HTTP POST リクエストとしてイベントを受信します。
  • DESTINATION_RUN_REGION は、宛先の Cloud Run サービスがあるリージョンです。指定しない場合、サービスはトリガーと同じリージョンにあるとみなされます。
  • PROJECT_ID はユーザーの Google Cloud プロジェクト ID です。
  • TOPIC_NAME は、既存の Pub/Sub トピックの名前です。トピックは、トリガーと同じプロジェクトに存在する必要があります。

注:

  • --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" フラグは必須です。
  • 各トリガーには複数のイベント フィルタを指定できます。その場合は、--event-filters=[ATTRIBUTE=VALUE,...] フラグにカンマ区切りで指定する必要があります。さらにフィルタを追加するには、このフラグを繰り返し指定します。すべてのフィルタに一致するイベントのみが宛先に送信されます。ワイルドカードと正規表現はサポートされていません。
  • --transport-topic フラグには、既存の Pub/Sub トピックの ID または完全修飾識別子を指定します。
  • --destination-run-path フラグを使用して、トリガーのイベントが送信される宛先の Cloud Run サービスの相対パスを指定することもできます。
  • デフォルトでは、Eventarc 用に作成された Pub/Sub サブスクリプションはアクティビティに関係なく保持され、期限切れになりません。非アクティブ期間を変更するには、サブスクリプションの管理をご覧ください。

例:

  gcloud eventarc triggers create pubsub-trigger-existing \
      --location=us-central1 \
      --destination-run-service=helloworld-events-pubsub \
      --destination-run-region=us-central1 \
      --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
      --transport-topic=projects/${PROJECT_ID}/topics/${TOPIC_NAME}

これにより、projects/${PROJECT_ID}/topics/${TOPIC_NAME} で識別される Pub/Sub トピックに pubsub-trigger-existing というトリガーが作成されます。

Cloud Audit Logs

gcloud eventarc triggers create TRIGGER \
    --location=LOCATION \
    --destination-run-service=DESTINATION_RUN_SERVICE \
    --destination-run-region=DESTINATION_RUN_REGION \
    --event-filters="type=google.cloud.audit.log.v1.written" \
    --event-filters="serviceName=SERVICE_NAME" \
    --event-filters="methodName=METHOD_NAME" \
    --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com

次のように置き換えます。

  • TRIGGER はトリガーの ID または完全修飾識別子です。
  • LOCATION は Eventarc トリガーのロケーションです。eventarc/location プロパティを設定することもできます(例: gcloud config set eventarc/location us-central1)。

    Eventarc は特定のリージョンとグローバル リージョンで使用できますが、デュアルリージョンとマルチリージョンのロケーションでは使用できません。グローバル トリガーによるパフォーマンスやデータ所在地の問題を回避するため、このロケーションと、イベントを生成している Google Cloud サービスのロケーションを一致させることをおすすめします。

    グローバル ロケーションを指定すると、イベント フィルタが一致するすべてのロケーションからイベントを受信します。たとえば、グローバル Eventarc トリガーを作成すると、EU と US マルチリージョンの Cloud Storage バケットなどのリソースからイベントを受信できます。

  • DESTINATION_RUN_SERVICE は、トリガーのイベントを受信する Cloud Run サービスの名前です。トリガーのロケーションがグローバルである場合を除き、サービスはトリガーと同じリージョンに存在している必要があります。サービスはトリガーと同じプロジェクトに配置する必要があり、イベントが生成されるたびに、ルート URL パス(/)に送信された HTTP POST リクエストとしてイベントを受信します。
  • DESTINATION_RUN_REGION は、宛先の Cloud Run サービスがあるリージョンです。指定しない場合、サービスはトリガーと同じリージョンにあるとみなされます。
  • SERVICE_NAME は Google Cloud サービスの識別子です。
  • METHOD_NAME はオペレーションの識別子です。
  • PROJECT_NUMBER は Google Cloud プロジェクト番号です。

注:

  • 以下のフラグは必須です。
    • --event-filters="type=google.cloud.audit.log.v1.written"
    • --event-filters="serviceName=VALUE"
    • --event-filters="methodName=VALUE"
  • serviceNamemethodName の値など、Eventarc でサポートされている監査ログイベントのリストについては、Eventarc でサポートされるイベントをご覧ください。
  • 各トリガーには複数のイベント フィルタを指定できます。その場合は、--event-filters=[ATTRIBUTE=VALUE,...] フラグにカンマ区切りで指定する必要があります。さらにフィルタを追加するには、このフラグを繰り返し指定します。すべてのフィルタに一致するイベントのみが宛先に送信されます。ワイルドカードと正規表現はサポートされていません。 Cloud Audit Logs のイベント フィルタを決定するをご覧ください。
  • --service-account フラグには、トリガーに関連付けられた Identity and Access Management(IAM)サービス アカウントのメールアドレスを指定します。
  • --event-filters="resourceName=VALUE" フラグを使用してリソースの完全なパスを指定することで、特定のリソースのイベントをフィルタリングできます。動的に作成され、作成時に ID が生成されるリソースの場合は、このフラグを省略します。
  • --destination-run-path フラグを使用して、トリガーのイベントが送信される宛先の Cloud Run サービスの相対パスを指定することもできます。

例:

  gcloud eventarc triggers create helloworld-trigger \
      --location=us-central1 \
      --destination-run-service=helloworld-events \
      --destination-run-region=us-central1 \
      --event-filters="type=google.cloud.audit.log.v1.written" \
      --event-filters="serviceName=storage.googleapis.com" \
      --event-filters="methodName=storage.buckets.update" \
      --event-filters="resourceName=projects/_/buckets/eventarc-bucket/objects/random.txt" \
      --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com

これにより、storage.googleapis.com によって書き込まれた監査ログと、storage.buckets.update として識別されるオペレーションに helloworld-trigger というトリガーが作成されます。

Cloud Storage

gcloud eventarc triggers create TRIGGER \
    --location=LOCATION \
    --destination-run-service=DESTINATION_RUN_SERVICE \
    --destination-run-region=DESTINATION_RUN_REGION \
    --event-filters="type=EVENT_FILTER_TYPE" \
    --event-filters="bucket=BUCKET" \
    --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com

次のように置き換えます。

  • TRIGGER はトリガーの ID または完全修飾識別子です。
  • LOCATION は Eventarc トリガーのロケーションです。eventarc/location プロパティを設定することもできます(例: gcloud config set eventarc/location us-central1)。

    Eventarc 用の Pub/Sub トリガーは、単一リージョンのロケーションでのみ使用できます。グローバル Eventarc トリガーを作成することはできません。

  • DESTINATION_RUN_SERVICE は、トリガーのイベントを受信する Cloud Run サービスの名前です。トリガーのロケーションがグローバルである場合を除き、サービスはトリガーと同じリージョンに存在している必要があります。サービスはトリガーと同じプロジェクトに配置する必要があり、イベントが生成されるたびに、ルート URL パス(/)に送信された HTTP POST リクエストとしてイベントを受信します。
  • DESTINATION_RUN_REGION は、宛先の Cloud Run サービスがあるリージョンです。指定しない場合、サービスはトリガーと同じリージョンにあるとみなされます。
  • EVENT_FILTER_TYPE は、Cloud Storage イベントの識別子で、次のいずれかになります。
    • google.cloud.storage.object.v1.finalized - バケット内で新しいオブジェクトが作成された時点(または既存のオブジェクトが上書きされ、そのオブジェクトの新しい世代が作成された時点)でイベントが送信されます。
    • google.cloud.storage.object.v1.archived - オブジェクトのライブ バージョンがアーカイブまたは削除された時点でイベントが送信されます。このイベントは、バージョニング対応バケットの場合にのみ送信されます。
    • google.cloud.storage.object.v1.deleted - オブジェクトが完全に削除された時点でイベントが送信されます。バケットのオブジェクト バージョニングの設定に応じて、このイベントが持つ意味は以下のように異なります。
      • バージョニングに対応するバケットの場合、バージョンが完全に削除されたときにのみ、イベントが送信されます(オブジェクトがアーカイブされたときには送信されません)。
      • バージョニングに対応しないバケットの場合、オブジェクトが削除または上書きされると、イベントが送信されます。
    • google.cloud.storage.object.v1.metadataUpdated - 既存のオブジェクトのメタデータが変更された時点でイベントが送信されます。
  • BUCKET は、Cloud Storage バケットのグローバルに一意の識別子です。
  • PROJECT_NUMBER は Google Cloud プロジェクト番号です。

注:

  • 以下のフラグは必須です。
    • --event-filters="type=EVENT_FILTER_TYPE"
    • --event-filters="bucket=BUCKET"
  • トリガーの作成後に EVENT_FILTER_TYPE を変更することはできません。代わりに、新しいトリガーを作成して古いトリガーを削除します。
  • イベントは、Cloud Storage からの Pub/Sub 通知を使用して配信されます。同一のバケットに対して過剰な数の通知を登録すると、エラー Cloud Storage bucket ...: Pub/Sub notification limit reached で示されるように、バケットの通知上限を超えてしまう可能性があります。特定のイベントをトリガーするように設定された通知構成は、最大 10 個までバケットに設定できます。Cloud Storage の割り当てと上限のページで、割り当てと上限の詳細をご確認ください。
  • 各トリガーには複数のイベント フィルタを指定できます。その場合は、--event-filters=[ATTRIBUTE=VALUE,...] フラグにカンマ区切りで指定する必要があります。さらにフィルタを追加するには、このフラグを繰り返し指定します。すべてのフィルタに一致するイベントのみが宛先に送信されます。ワイルドカードと正規表現はサポートされていません。
  • --service-account フラグには、トリガーに関連付けられた Identity and Access Management(IAM)サービス アカウントのメールアドレスを指定します。
  • --destination-run-path フラグを使用して、トリガーのイベントが送信される宛先の Cloud Run サービスの相対パスを指定することもできます。
  • Cloud Storage バケットは、Eventarc トリガーと同じ Google Cloud プロジェクトおよびリージョンまたはマルチリージョンに存在する必要があります。

例:

  gcloud eventarc triggers create helloworld-trigger \
      --location=us-central1 \
      --destination-run-service=helloworld-events \
      --destination-run-region=us-central1 \
      --event-filters=type=google.cloud.storage.object.v1.finalized \
      --event-filters="bucket=my-project-bucket" \
      --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com

このコマンドは、Cloud Storage バケット my-project-bucketgoogle.cloud.storage.object.v1.finalized として識別されるイベントに対して helloworld-trigger というトリガーを作成します。

Console を使用したトリガーの作成

Cloud Console を使用して、フィルタを使用したトリガーを作成できます。

  1. Cloud Console で [Cloud Run] に移動します。

    Cloud Run に移動

  2. サービスの一覧でサービスをクリックします。

  3. [トリガー] タブをクリックし、[トリガーを追加] をクリックします。

  4. [イベントの選択] プルダウン リストには、サポートされているすべてのサービスとイベントが表示されます。

    Console でのトリガーの追加

  5. サービスを選択した後、イベントを選択できます。

    たとえば、[Cloud Storage] > storage.objects.create を選択します。

    フィルタするイベントを指定する必要があります。Cloud Audit Logs のイベント フィルタを決定するをご覧ください。

  6. Cloud Pub/Sub トピック イベントを選択するときに、既存のトピックを選択するか、トリガーに新しいトピックを作成します。

    デフォルトでは、Eventarc 用に作成された Pub/Sub サブスクリプションはアクティビティに関係なく保持され、期限切れになりません。非アクティブ期間を変更するには、サブスクリプションの管理をご覧ください。
  7. その他のイベントの場合は、[完全なリソース名] フィールドにリソースの完全なパスを指定できます。

    たとえば、「projects/_/buckets/eventarc-bucket/objects/random.txt」と入力します。

    動的に作成され、作成時に ID が生成されるリソースの場合は、このフラグを省略します。

  8. イベントを受信する場所を選択します。

  9. Cloud Run サービスを呼び出すサービス アカウントを構成し、受信リクエストの送信先であるサービス URL パスを指定します。

    Cloud Run の宛先の場合、サービスを呼び出すときにこのサービス アカウントを使用して ID トークンを生成します。

  10. トリガーの作成後、[トリガー] タブにチェックマーク が付いていることを確認します。

次のステップ