Cloud Storage イベントからトリガーを作成する

Cloud Run では、Cloud Storage の変更に応じて、Eventarc を使用して Cloud Storage からサービスをトリガーできます。

サービスに Cloud Storage トリガーを指定するときに、イベントタイプを選択して Cloud Storage バケットを指定します。このトリガーの結果、指定されたバケット内のオブジェクト(ファイル)が変更されるたびにサービスが呼び出されます。

Cloud Storage バケットのイベントによってサービスがトリガーされるようにするには、サービスとバケットが同じ Google Cloud プロジェクトに存在する必要があります。

Cloud Storage イベントからトリガーを作成する詳細な手順とコードサンプルについては、次のチュートリアルをご覧ください。

サポートされている Cloud Storage イベントタイプ

Cloud Run は、次の Cloud Storage イベントタイプをサポートしています。

イベント イベントタイプ 説明
オブジェクトのファイナライズ
  • google.cloud.storage.object.v1.finalized (Eventarc 経由)
新しいオブジェクトを作成するか、既存のオブジェクトを上書きし、 Cloud Storage がそのオブジェクトの新しい世代を作成すると送信されます。
オブジェクトの削除
  • google.cloud.storage.object.v1.deleted(Eventarc 経由)
オブジェクトが削除(復元可能)された場合に発生します。詳細については、削除(復元可能)をご覧ください。
オブジェクトのアーカイブ
  • google.cloud.storage.object.v1.archived(Eventarc 経由)
オブジェクトのライブ バージョンが非現行バージョンになった場合に発生します。詳細については、オブジェクトのバージョニングをご覧ください。
オブジェクト メタデータの更新
  • google.cloud.storage.object.v1.metadataUpdated(Eventarc 経由)
既存オブジェクトのメタデータを変更したときに発生します。

Google イベント リポジトリには、イベントデータを処理するための追加のリソースが含まれています。

始める前に

  1. 設定ページの説明に従って、Cloud Run に新しいプロジェクトを設定したことを確認してください。

  2. Artifact Registry、Cloud Build、Cloud Run Admin API、Eventarc、Cloud Logging、Pub/Sub、Cloud Storage API を有効にします。

    API を有効にする

  3. 必要な IAM のロールと権限を付与します

デプロイ担当者のアカウントに必要なロール

Cloud Storage イベントからトリガーするために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

デフォルトでは、 Cloud Build の権限には、Artifact Registry アーティファクトをアップロードおよびダウンロードするための権限が含まれています

サービスのトリガーを作成する

サービスをデプロイしたら、 Google Cloud コンソール、 Google Cloud CLI、または Terraform を使用してトリガーを構成できます。

コンソール

  1. コンテナ またはソース を使用して Cloud Run サービスをデプロイします。

  2. コンソール Google Cloud で Cloud Run に移動します。

    Cloud Run に移動

  3. サービスのリストで既存のサービスをクリックします。

  4. サービスの詳細ページで、[トリガー] タブに移動します。

  5. [ Add trigger] をクリックし、[Cloud Storage trigger] を選択します。

  6. [Eventarc トリガー] ペインで、トリガーの詳細を次のように変更します。

    1. [トリガーの名前] フィールドにトリガーの名前を入力するか、デフォルトの名前を使用します。

    2. [トリガーのタイプ] のリストから、次のいずれかのトリガータイプを指定します。

      • Google のソース: Pub/Sub、Cloud Storage、Firestore などの Google イベント プロバイダのトリガーを指定できます。

      • サードパーティ: Eventarc ソースを提供する Google 以外のプロバイダと統合できます。詳細については、 Eventarc のサードパーティ イベントをご覧ください。

    3. [イベント プロバイダ] リストから [Cloud Storage] を選択し、サービスをトリガーするイベントのタイプを提供するプロダクトを選択します。イベント プロバイダのリストについては、 イベント プロバイダと宛先をご覧ください。

    4. [google.cloud.storage.object.v1.finalized] リストから [google.cloud.storage.object.v1.finalized] を選択します。トリガーの構成は、サポートされているイベントタイプによって異なります。詳細については、イベントタイプをご覧ください。

    5. [バケット] フィールドで [参照] をクリックして、トリガーをモニタリングする Cloud Storage バケットを選択します。このバケット内のオブジェクトが変更されると、関数の呼び出しがトリガーされます。

    6. [リージョン] フィールドが有効になっている場合は、Eventarc トリガーのロケーションを選択します。一般に、Eventarc トリガーのロケーションは、イベントをモニタリングする Google Cloud リソースのロケーションと一致している必要があります。ほとんどの場合に、サービスを同じリージョンにデプロイすることも必要です。Eventarc トリガーのロケーションの詳細については、 Eventarc のロケーションについて をご覧ください。

    7. [サービス アカウント] フィールドで、サービス アカウントを選択します。 Eventarc トリガーはサービス アカウントにリンクされ、サービスを呼び出すときに ID として使用します。Eventarc トリガーのサービス アカウントには、サービスを呼び出す権限が必要です。デフォルトでは、Cloud Run Compute Engine のデフォルトのサービス アカウントを使用します。

    8. 受信リクエストの送信先である [サービス URL パス] を指定することもできます。これは、トリガーのイベントの送信先である宛先サービスの相対パスです。例: //routerouteroute/subroute

    9. 配信試行が失敗した場合に再試行を有効にするには、[失敗時に再試行を有効にする] チェックボックスをオンにします。それ以外の場合、デフォルトの動作は再試行なしの 1 回の配信試行です。詳細については、イベントの再試行をご覧ください。

    10. 必須フィールドに値を入力したら、[トリガーを保存] をクリックします。

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

gcloud

  1. コンテナ またはソース を使用して Cloud Run サービスをデプロイします。

  2. 次のコマンドを実行して、イベントをフィルタしてルーティングするトリガーを作成します。

    gcloud eventarc triggers create TRIGGER_NAME  \
        --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.
    

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

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

      パフォーマンスやデータ所在地の問題を回避するため、このロケーションは、イベントを生成している Google Cloud サービスのロケーションと一致させる必要があります。詳細については、 Eventarc のロケーションをご覧ください。

    • DESTINATION_RUN_SERVICE: トリガーのイベントを受け取る Cloud Run サービスの名前。サービスは、Cloud Run でサポートされているどのロケーションにも配置できます。トリガーと同じロケーションに配置する必要はありません。ただし、サービスはトリガーと同じプロジェクトに配置する必要があり 、イベントが生成されるたびに、ルート URL パス (/)に送信された HTTP POST リクエストとしてイベントを受信します。
    • DESTINATION_RUN_REGION: (省略可)宛先の Cloud Run サービスがある Cloud Run ロケーション。指定しない場合、サービスはトリガーと同じリージョンにあるとみなされます。
    • EVENT_FILTER_TYPE: イベントの識別子。メソッドの API 呼び出しが成功すると、イベントが生成されます。長時間実行オペレーションの場合、イベントは、アクションが正常に完了したときにのみ、オペレーションの終了時に生成されます。 サポートされているイベントタイプの一覧については、 Eventarc でサポートされている Google イベントタイプをご覧ください。
    • BUCKET: Cloud Storage バケットのグローバルに一意の識別子。
    • SERVICE_ACCOUNT_NAME: ユーザー管理のサービス アカウントの名前。
    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。

    注:

    • --event-filters="type=EVENT_FILTER_TYPE" フラグは必須です。他のイベント フィルタが設定されていない場合は、すべての リソースのイベントが照合されます。
    • EVENT_FILTER_TYPE は作成後に 変更することはできません。EVENT_FILTER_TYPE を変更するには、新しいトリガーを作成して古いトリガーを削除します。
    • 各トリガーには複数のイベント フィルタを指定できます。その場合は、--event-filters=[ATTRIBUTE=VALUE,...] フラグにカンマ区切りで指定する必要があります。さらにフィルタを追加するには、このフラグを繰り返し指定します。すべてのフィルタに一致するイベントのみが宛先に送信されます。ワイルドカード と正規表現はサポートされていません。ただし、 --event-filters-path-pattern フラグを使用する場合は、リソース パスパターンを定義できます。
    • 必要に応じて、再試行なしで 1 回のイベント配信試行を指定するには、 --max-retry-attempts フラグを使用します。有効な値は 1 のみです。この フラグを省略すると、標準の再試行動作が適用されます。詳細については、 イベントの再試行をご覧ください。
    • 他のフラグも使用できます。詳細については、 gcloud eventarc triggers create. をご覧ください。

Terraform

Cloud Run サービスの Eventarc トリガーを作成するには、Terraform を使用してトリガーを作成するをご覧ください。

関数のトリガーを作成する

関数をデプロイしたら、 Google Cloud コンソール、 Google Cloud CLI、または Terraform を使用してトリガーを構成できます。

コンソール

Google Cloud コンソールを使用して関数を作成する場合、関数の作成時に トリガーを追加することもできます。関数のトリガーを作成する手順は次のとおりです。

  1. コンソール Google Cloud で Cloud Run に移動します。

    Cloud Run に移動

  2. [関数を作成] をクリックし、関数の詳細を入力します。デプロイ時に関数を構成する方法については、関数をデプロイするをご覧ください。

  3. [トリガー] セクションで [トリガーを追加] をクリックします。

  4. [Cloud Storage トリガー] を選択します。

  5. [Eventarc トリガー] ペインで、トリガーの詳細を次のように変更します。

    1. [トリガーの名前] フィールドにトリガーの名前を入力するか、デフォルトの名前を使用します。

    2. [トリガーのタイプ] をリストから選択します。

      • Google のソース: Pub/Sub、Cloud Storage、Firestore などの Google イベント プロバイダのトリガーを指定できます。

      • サードパーティ: Eventarc ソースを提供する Google 以外のプロバイダと統合できます。詳細については、 Eventarc のサードパーティ イベントをご覧ください。

    3. [イベント プロバイダ] リストから [Cloud Storage] を選択し、関数をトリガーするイベントのタイプを提供するプロダクトを選択します。 イベント プロバイダのリストについては、 イベント プロバイダと宛先をご覧ください。

    4. [google.cloud.storage.object.v1.finalized] リストから [google.cloud.storage.object.v1.finalized] を選択します。トリガーの構成は、サポートされているイベントタイプによって異なります。詳細については、イベントタイプをご覧ください。

    5. [イベントデータのコンテンツ タイプ] フィールドはそのままにします。

    6. [バケット] フィールドで [参照] をクリックして、トリガーをモニタリングする Cloud Storage バケットを選択します。このバケット内のオブジェクトが変更されると、関数の呼び出しがトリガーされます。

    7. If the [Region] field is enabled, select a [location] for the Eventarc trigger. 一般に、Eventarc トリガーのロケーションは、イベントをモニタリングする Google Cloud リソースのロケーションと一致している必要があります。ほとんどの場合に、関数を同じリージョンにデプロイすることも必要です。 Eventarc トリガーのロケーションの詳細については、Eventarc のロケーションについて をご覧ください。

    8. [サービス アカウント] フィールドで、サービス アカウントを選択します。Eventarc トリガーはサービス アカウントにリンクされ、関数を呼び出すときに ID として使用します。Eventarc トリガーのサービス アカウントには、関数を呼び出す権限が必要です。デフォルトでは、Cloud Run Compute Engine のデフォルトのサービス アカウントを使用します。

    9. 受信リクエストの送信先である [サービス URL パス] を指定することもできます。これは、トリガーのイベントの送信先である宛先サービスの相対パスです。例: //routerouteroute/subroute

    10. 配信試行が失敗した場合に再試行を有効にするには、[失敗時に再試行を有効にする] チェックボックスをオンにします。それ以外の場合、デフォルトの動作は再試行なしの 1 回の配信試行です。詳細については、イベントの再試行をご覧ください。

  6. 必須フィールドに値を入力したら、[トリガーを保存] をクリックします。

  7. [作成] をクリックします。

  8. [ソース] タブで、必要に応じてソースコードを編集し、[保存して再デプロイ] を選択します。

gcloud

gcloud CLI を使用して関数を作成する場合は、まず関数をデプロイしてからトリガーを作成する必要があります。関数のトリガーを作成する手順は次のとおりです。

  1. サンプルコードのあるディレクトリで次のコマンドを実行して、関数をデプロイします。

    gcloud run deploy FUNCTION \
        --source . \
        --function FUNCTION_ENTRYPOINT \
        --base-image BASE_IMAGE_ID \
        --region REGION
    

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

    • FUNCTION: デプロイする関数の名前。このパラメータは省略できますが、省略すると名前の入力を求められます。

    • FUNCTION_ENTRYPOINT: ソースコード内の関数のエントリ ポイント。これは、関数の実行時に Cloud Run が実行するコードです。このフラグには、ソースコード内に存在する関数名または完全修飾クラス名を指定する必要があります。

    • BASE_IMAGE_ID: 関数のベースイメージ環境。ベースイメージと各イメージに含まれるパッケージの詳細については、 ランタイム ベースイメージをご覧ください。

    • REGION: 関数をデプロイする Google Cloud リージョン。例: europe-west1

  2. 次のコマンドを実行して、イベントをフィルタしてルーティングするトリガーを作成します。

    gcloud eventarc triggers create TRIGGER_NAME  \
        --location=LOCATION \
        --destination-run-service=FUNCTION  \
        --destination-run-region=DESTINATION_RUN_REGION \
        --event-filters="type=EVENT_FILTER_TYPE" \
        --event-filters="bucket=BUCKET" \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.
    

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

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

      パフォーマンスやデータ所在地の問題を回避するため、このロケーションは、イベントを生成している Google Cloud サービスのロケーションと一致させる必要があります。詳細については、 Eventarc のロケーションをご覧ください。

    • FUNCTION: トリガーのイベントを受け取る、デプロイされた Cloud Run function の関数の名前。
    • DESTINATION_RUN_REGION:(省略可)宛先の Cloud Run functions の関数がある Cloud Run ロケーション。指定しない場合、関数はトリガーと同じリージョンにあるとみなされます。
    • EVENT_FILTER_TYPE: イベントの識別子。 メソッドの API 呼び出しが成功すると、イベントが生成されます。長時間実行オペレーションの場合、イベントは、アクションが正常に完了したときにのみ、オペレーションの終了時に生成されます。 サポートされているイベントタイプの一覧については、 Eventarc でサポートされている Google イベントタイプをご覧ください。
    • BUCKET: Cloud Storage バケットのグローバルに一意の識別子。
    • SERVICE_ACCOUNT_NAME: ユーザー管理のサービス アカウントの名前。
    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。

    注:

    • --event-filters="type=EVENT_FILTER_TYPE" フラグは必須です。他のイベント フィルタが設定されていない場合は、すべての リソースのイベントが照合されます。
    • EVENT_FILTER_TYPE は作成後に 変更することはできません。EVENT_FILTER_TYPE を変更するには、新しいトリガーを作成して古いトリガーを削除します。
    • 各トリガーには複数のイベント フィルタを指定できます。その場合は、--event-filters=[ATTRIBUTE=VALUE,...] フラグにカンマ区切りで指定する必要があります。さらにフィルタを追加するには、このフラグを繰り返し指定します。すべてのフィルタに一致するイベントのみが宛先に送信されます。ワイルドカード と正規表現はサポートされていません。ただし、 --event-filters-path-pattern フラグを使用する場合は、リソース パスパターンを定義できます。
    • 必要に応じて、再試行なしで 1 回のイベント配信試行を指定するには、 --max-retry-attempts フラグを使用します。有効な値は 1 のみです。この フラグを省略すると、標準の再試行動作が適用されます。詳細については、 イベントの再試行をご覧ください。
    • 他のフラグも使用できます。詳細については、 gcloud eventarc triggers create. をご覧ください。

Terraform

Cloud Run functions 関数の Eventarc トリガーを作成するには、Terraform を使用してトリガーを作成するをご覧ください。

イベント配信

Cloud Storage トリガーは、Cloud Storage の Pub/Sub 通知を使用して実装されます。イベントには Pub/Sub 通知の配信の保証が適用されます。

Cloud Storage バケットには、特定のイベントをトリガーするように設定された通知構成を最大 10 個まで設定できます。バケットの通知の上限を超えると、関数のデプロイが失敗し、次のようなエラーが返されます。

Cloud Storage bucket ...: Pub/Sub notification limit reached

この制限を回避するには、独自の Pub/Sub トピックを管理し、関数が応答する Cloud Storage 通知のタイプを登録します。たとえば、選択したイベント(オブジェクトの作成など)の単一の通知を Pub/Sub トピックに構成できます。次に、トピックでイベントを処理し、複数の宛先にファンアウトするために、必要な数の関数サブスクライバーを用意します。例:

  1. 独自の Pub/Sub トピックを作成する
  2. Cloud Storage バケットに、特定のイベント(オブジェクト作成の OBJECT_FINALIZE など)でトリガーされ、単一の Pub/Sub トピックにイベントを送信する単一の通知構成を作成する。
  3. Pub/Sub トピックによってトリガーされる関数を作成する。

これにより、1 つの Cloud Storage 通知構成、1 つの Pub/Sub トピック、必要な数の関数(Pub/Sub で許可されている非常に高い配信上限内)が作成されます。

Cloud Storage の上限の詳細については、Cloud Storage の割り当てと上限をご覧ください。

次のステップ