Cloud Storage イベントを Cloud Run に転送する

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

Eventarc は、HTTP リクエストを使用して、イベントを CloudEvents 形式でイベント レシーバーに配信します。

以下では、Cloud Storage 直接イベントによってトリガーされる Cloud Run サービスへのイベント ルーティングを構成する方法について説明します。詳細については、対応している直接イベントのリストをご覧ください。

トリガーを作成する準備

トリガーを作成する前に、次の前提条件を満たす必要があります。

コンソール

  1. Google Cloud コンソールのプロジェクト セレクタ ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  2. Cloud Logging、Eventarc、Eventarc Publishing API を有効にします。

    API を有効にする

  3. 該当する場合は、直接イベントに関連する API を有効にします。たとえば、Cloud Storage イベントの場合は Cloud Storage API を有効にします。

  4. アカウントがない場合は、ユーザー管理のサービス アカウントを作成し、Eventarc がターゲット サービスのイベントを管理できるように、必要なロールと権限を付与します。

    1. Google Cloud コンソールで [サービス アカウントの作成] ページに移動します。

      [サービス アカウントの作成] に移動

    2. プロジェクトを選択します。

    3. [サービス アカウント名] フィールドに名前を入力します。Google Cloud コンソールでは、この名前に基づいて [サービス アカウント ID] フィールドに値が設定されます。

      [サービス アカウントの説明] フィールドに説明を入力します。例: Service account for event trigger

    4. [作成して続行] をクリックします。

    5. 適切なアクセス権を付与するには、[ロールを選択] リストで、認証された呼び出しまたは未認証の呼び出しのためにサービス アカウントに付与する必要がある Identity and Access Management(IAM)ロールを選択します。詳細については、Cloud Run ターゲットのロールと権限をご覧ください。

      ロールを追加するには、[別のロールを追加] をクリックして各ロールを追加します。

    6. [続行] をクリックします。

    7. アカウントの作成を完了するには、[完了] をクリックします。

  5. Cloud Storage サービス エージェントに Pub/Sub パブリッシャーのロールを付与します。通常、これは service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com です。Cloud Storage サービス エージェントのメールアドレスを取得できます。

    1. Google Cloud コンソールの [IAM] ページに移動します。

      [IAM] に移動

    2. Cloud Storage サービス エージェントの行で、プリンシパルを編集します」をクリックします(サービス エージェントがリストにない場合は、次のステップに進みます)。権限の編集ペインが開きます。

      1. [別のロールを追加] をクリックして、Pub/Sub パブリッシャーのロールを検索します。
      2. ロールを選択します。
      3. [保存] をクリックします。
    3. サービス エージェントがリストにない場合は、[アクセス権を付与] をクリックします。アクセス権の付与ペインが開きます。

      1. [新しいプリンシパル] フィールドに、サービス エージェントのメールアドレスを入力します。
      2. [ロールを選択] リストで、Pub/Sub パブリッシャー ロールを検索します。
      3. ロールを選択します。
      4. [保存] をクリックします。

gcloud

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. Cloud Logging、Eventarc、Eventarc Publishing API を有効にします。

    gcloud services enable logging.googleapis.com \
      eventarc.googleapis.com \
      eventarcpublishing.googleapis.com
    

  3. 該当する場合は、直接イベントに関連する API を有効にします。たとえば、Cloud Storage イベントの場合は storage.googleapis.com を有効にします。

  4. アカウントがない場合は、ユーザー管理のサービス アカウントを作成し、Eventarc がターゲット サービスのイベントを管理できるように、必要なロールと権限を付与します。

    1. サービス アカウントを作成します。

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
      

      SERVICE_ACCOUNT_NAME は、サービス アカウントの名前に置き換えます。6~30 文字にする必要があり、小文字の英数字とダッシュを使用できます。作成したサービス アカウントの名前は変更できません。

    2. 認証済み呼び出しまたは未認証の呼び出しのために必要な Identity and Access Management(IAM)のロールまたは権限を付与します。詳細については、Cloud Run ターゲットのロールと権限をご覧ください。

  5. Cloud Storage サービス アカウントに pubsub.publisher ロールを付与します。

    SERVICE_ACCOUNT="$(gsutil kms serviceaccount -p PROJECT_ID)"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:${SERVICE_ACCOUNT}" \
      --role="roles/pubsub.publisher"
    

トリガーを作成する

Eventarc トリガーは、Google Cloud CLI または Google Cloud コンソールを使用して作成できます。

コンソール

  1. Google Cloud コンソールで、[Eventarc] の [トリガー] ページに移動します。

    [トリガー] に移動

  2. [トリガーを作成] をクリックします。
  3. トリガー名を入力します。

    これはトリガーの ID で、先頭は英字にする必要があります。63 文字以下とし、小文字、数字、ハイフンを使用することができます。

  4. [トリガーのタイプ] で、[Google のソース] を選択します。
  5. [イベント プロバイダ] リストで「Cloud Storage」を選択します。

    関連する Google Cloud のドキュメントでは、イベント プロバイダ名の前に Cloud または Google Cloud が付いていない場合があります。たとえば、Memorystore for Redis はコンソールで Google Cloud Memorystore for Redis と表示されます。

  6. [イベントタイプ] リストで、直接イベントからイベントタイプを選択します。
    • google.cloud.storage.object.v1.archived: オブジェクトのライブ バージョンがアーカイブまたは削除された時点でイベントが送信されます。このイベントは、バージョニング対応バケットの場合にのみ送信されます。
    • google.cloud.storage.object.v1.delete: オブジェクトが完全に削除されたときにイベントが送信されます。バケットのオブジェクト バージョニングの設定に応じて、このイベントが持つ意味は以下のように異なります。
      • バージョニング対応バケットの場合、バージョンが完全に削除されたときにのみ、イベントが送信されます(オブジェクトがアーカイブされたときには送信されません)。
      • バージョニングに対応しないバケットの場合、オブジェクトが削除または上書きされると、イベントが送信されます。
    • google.cloud.storage.object.v1.finalized: バケット内で新しいオブジェクトが作成された時点(または既存のオブジェクトが上書きされ、そのオブジェクトの新しい世代が作成された時点)でイベントが送信されます。
    • google.cloud.storage.object.v1.metadataUpdated: 既存のオブジェクトの [メタデータ](/storage/docs/metadata) が変更されたときにイベントが送信されます。
  7. [イベントデータのコンテンツ タイプ] リストで、イベント ペイロードのエンコードを選択します。

    Cloud Storage からの直接イベントの場合は、application/json にする必要があります。

  8. Cloud Storage バケットの、グローバルで一意の識別子を指定するか、参照します。

    Cloud Storage バケットの Google Cloud プロジェクトとロケーション(リージョンまたはマルチリージョン)は Eventarc トリガーと同じにする必要があります。

  9. リージョンを選択します。

    Eventarc の Cloud Storage トリガーは、シングルリージョン、デュアルリージョン、マルチリージョンのロケーションで利用できます。Cloud Storage バケットの Google Cloud プロジェクトとロケーション(リージョンまたはマルチリージョン)は Eventarc トリガーと同じにする必要があります。

    イベントは、Cloud Storage からの Pub/Sub 通知を使用して配信されます。同一のバケットに対して過剰な数の通知を登録すると、エラー Cloud Storage bucket ...: Pub/Sub notification limit reached で示されるように、バケットの通知上限を超えてしまう可能性があります。特定のイベントをトリガーするように設定された通知構成は、最大 10 個までバケットに設定できます。Cloud Storage の割り当てと上限のページで、割り当てと上限の詳細をご確認ください。

  10. サービスまたはワークフローを呼び出すサービス アカウントを選択します。

    新しいサービス アカウントを作成することもできます。

    これにより、トリガーに関連付けられた Identity and Access Management(IAM)サービス アカウントのメールアドレスが設定されます。このメールアドレスには、Eventarc が必要とする特定のロールがすでに付与されています。

  11. [イベントの宛先] リストで、[Cloud Run] を選択します。
  12. サービスを選択します。

    これは、トリガーのイベントを受信するサービスの名前です。サービスはトリガーと同じプロジェクトに配置する必要があり、イベントが生成されるたびに、ルート URL パス(/)に送信された HTTP POST リクエストとしてイベントを受信します。

  13. 必要に応じて、受信リクエストの送信先であるサービスの URL パスを指定できます。

    これは、トリガーのイベントの送信先である宛先サービスの相対パスです。例: //routerouteroute/subroute

  14. [作成] をクリックします。
  15. トリガーの作成後は、イベントソースのフィルタを変更できません。代わりに、新しいトリガーを作成して古いトリガーを削除します。詳しくは、トリガーの管理をご覧ください。

gcloud

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

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=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

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

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

    Cloud Storage バケットの Google Cloud プロジェクトとロケーション(リージョンまたはマルチリージョン)は Eventarc トリガーと同じにする必要があります。詳細については、Eventarc のロケーションをご覧ください。

  • DESTINATION_RUN_SERVICE: トリガーのイベントを受け取る Cloud Run サービスの名前。サービスは、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 バケットの、グローバルに一意の識別子です。
  • SERVICE_ACCOUNT_NAME: ユーザー管理のサービス アカウントの名前。
  • PROJECT_ID: Google Cloud プロジェクト ID。

注:

  • Cloud Storage からの直接イベントの場合、イベント ペイロードのエンコードは application/json です。
  • 以下のフラグは必須です。
    • --event-filters="type=EVENT_FILTER_TYPE"
    • --event-filters="bucket=BUCKET"
  • 各トリガーには複数のイベント フィルタを指定できます。その場合は、--event-filters=[ATTRIBUTE=VALUE,...] フラグにカンマ区切りで指定する必要があります。さらにフィルタを追加するには、このフラグを繰り返し指定します。すべてのフィルタに一致するイベントのみが宛先に送信されます。ワイルドカードと正規表現はサポートされていません。
  • トリガーの作成後に、イベント フィルタのタイプを変更することはできません。別のイベントタイプには、新しいトリガーを作成する必要があります。
  • イベントは、Cloud Storage からの Pub/Sub 通知を使用して配信されます。同一のバケットに対して過剰な数の通知を登録すると、エラー Cloud Storage bucket ...: Pub/Sub notification limit reached で示されるように、バケットの通知上限を超えてしまう可能性があります。バケットには、特定のイベントをトリガーするように設定された通知構成を最大 10 個まで設定できます。Cloud Storage の割り当てと上限のページで、割り当てと上限の詳細をご確認ください。
  • --service-account フラグには、トリガーに関連付けられた Identity and Access Management(IAM)サービス アカウントのメールアドレスを指定します。
  • --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.storage.object.v1.finalized" \
    --event-filters="bucket=my-bucket" \
    --service-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com

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

Terraform

Terraform を使用して、Cloud Run の宛先のトリガーを作成できます。詳細については、Terraform を使用してトリガーを作成するをご覧ください。

トリガーを一覧表示する

トリガーの作成を確認するには、Google Cloud CLI または Google Cloud コンソールを使用して Eventarc トリガーを一覧表示します。

コンソール

  1. Google Cloud コンソールで、[Eventarc] の [トリガー] ページに移動します。

    [トリガー] に移動

    このページには、すべてのロケーションのトリガーが一覧表示されます。また、名前、リージョン、イベント プロバイダ、宛先などの詳細情報も表示されます。

  2. トリガーをフィルタするには:

    1. [ フィルタ] フィールドまたは [トリガーをフィルタリング] フィールドをクリックします。
    2. [プロパティ] リストで、トリガーをフィルタするオプションを選択します。

    1 つのプロパティを選択することも、論理演算子 OR を使用して複数のプロパティを追加することもできます。

  3. トリガーを並べ替えるには、サポートされている列見出しの横にある [ 並べ替え] をクリックします。

gcloud

次のコマンドを実行してトリガーを一覧表示します。

gcloud eventarc triggers list --location=-

すべてのロケーションのトリガーが一覧表示されます。名前、タイプ、宛先、ステータスなどの詳細情報も表示されます。

次のステップ