Eventarc でトリガーを作成する

このページでは、Cloud Run サービスが別のサービスからイベントを受信できるように Eventarc トリガーを作成する方法について説明します。 Google Cloud

Eventarc は、基盤となるインフラストラクチャを実装、カスタマイズ、またはメンテナンスすることなく、イベント ドリブン アーキテクチャを構築できるサービスです。 Google Cloud

Eventarc トリガーを作成するには、トリガーのフィルタを指定し、イベントソースやターゲット Cloud Run サービスなど、イベントのルーティングを構成します。指定したイベントまたはイベントセットがフィルタと一致すると、イベントに応じて Cloud Run サービスが自動的に呼び出されます。Eventarc トリガーを使用するサービスは、イベント ドリブン サービスと呼ばれます。Cloud Run サービスに送信されたイベントは、HTTP リクエストの形式で受信されます。

サービスに対するリクエストをトリガーするイベントの種類は次のとおりです。

Google Cloud CLI または Eventarc コンソール ページで Eventarc トリガーを作成することもできます。特定のプロバイダ、イベントタイプ、宛先のトリガーを作成する手順については、リストをフィルタして、Eventarc のイベント プロバイダと宛先の詳細をご覧ください。

トリガーのロケーション

Eventarc トリガーを作成するときに、トリガーのロケーションを指定します。これは、イベントをモニタリングする Google Cloud リソースのロケーションと一致する必要があります。ほとんどの場合、イベントドリブンの Cloud Run サービスを同じリージョンにデプロイする必要があります。詳細については、Eventarc のロケーションについてをご覧ください。

トリガー ID

Eventarc トリガーのサービス アカウントには、サービスを呼び出す権限が必要です。Compute Engine のデフォルトのサービス アカウントに、サービスを呼び出すための正しい権限があることを確認する必要があります。詳細については、必要なロールをご覧ください。

始める前に

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

  2. Artifact Registry、Cloud Build、Cloud Run Admin API、Eventarc API を有効にします。

    API を有効にする

必要なロール

デプロイ担当者アカウント、トリガー ID、必要に応じて Pub/Sub サービス エージェントに次の IAM ロールを付与する必要があります。

Eventarc トリガーの構成に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

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

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

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

  1. Compute Engine のデフォルトのサービス アカウントをメモしておいてください。テスト目的で、Eventarc トリガーに関連付けて、トリガーの ID を示すためです。このサービス アカウントは、Compute Engine を使用する Google Cloud サービスを有効にするか、使用すると自動的に作成されます。メールアドレスの形式は次のとおりです。

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    PROJECT_NUMBER は、使用するプロジェクト番号に置き換えます。 Google Cloudプロジェクト番号は、Google Cloud コンソールの [ようこそ] ページで確認できます。また、次のコマンドを実行して確認することもできます。

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

    本番環境では、新しいサービス アカウントを作成して、必要最小限の権限を含む、最小権限の原則に従った 1 つ以上の IAM ロールを付与することを強くおすすめします。

  2. デフォルトでは、Cloud Run サービスを呼び出すことができるのは、プロジェクト オーナー、プロジェクト編集者、Cloud Run 管理者、起動元のみです。サービスごとにアクセスを制御できます。ただし、テスト目的の場合は、プロジェクトの Cloud Run 起動元ロールrun.invoker)を Compute Engine サービス アカウントに付与してください。 Google Cloud これにより、プロジェクト内のすべての Cloud Run サービスとジョブにロールが付与されます。
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/run.invoker

    Cloud Run 起動元ロールを付与せずに認証済みの Cloud Run サービスのトリガーを作成すると、トリガーは正常に作成され、アクティブになります。ただし、トリガーが期待どおりに機能せず、次のようなメッセージがログに記録されます。

    The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.
  3. プロジェクトの Eventarc イベント レシーバーのロールroles/eventarc.eventReceiver)を Compute Engine のデフォルト サービス アカウントに付与して、Eventarc トリガーがイベント プロバイダからイベントを受信できるようにします。
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/eventarc.eventReceiver
  • 2021 年 4 月 8 日以前に、認証済みの Pub/Sub push リクエストをサポートするために Cloud Pub/Sub サービス エージェントを有効にした場合は、サービス アカウント トークン作成者のロールroles/iam.serviceAccountTokenCreator)をサービス エージェントに付与します。それ以外の場合、このロールはデフォルトで付与されます。
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator

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

トリガーは、サービスをデプロイした後に指定できます。

任意のツールを使用して、手順のタブでクリックします。

  1. コンテナを使用するか、ソースから Cloud Run サービスをデプロイします。

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

    [Cloud Run] に移動

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

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

  5. [トリガーを追加] をクリックし、オプションを選択します。

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

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

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

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

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

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

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

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

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

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

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

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

  1. コンテナを使用するか、ソースから Cloud Run サービスをデプロイします。

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

    gcloud eventarc triggers create TRIGGER_NAME  \
        --location=REGION \
        --destination-run-service=SERVICE  \
        --destination-run-region=REGION \
        --event-filters="EVENT_FILTER" \
        --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

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

    • TRIGGER_NAME: トリガーの名前。

    • EVENTARC_TRIGGER_LOCATION: Eventarc トリガーのロケーション。一般に、Eventarc トリガーのロケーションは、イベントをモニタリングするリソースのロケーションと一致する必要があります。 Google Cloud ほとんどの場合、サービスも同じリージョンにデプロイする必要があります。詳細については、Eventarc のロケーションをご覧ください。

    • SERVICE は、デプロイするサービスの名前に置き換えます。

    • REGION は、サービスの Cloud Run リージョンに置き換えます。

    • PROJECT_NUMBER は Google Cloud プロジェクト番号に置き換えます。Eventarc トリガーはサービス アカウントにリンクされ、サービスを呼び出すときに ID として使用します。Eventarc トリガーのサービス アカウントには、サービスを呼び出す権限が必要です。デフォルトでは、Cloud Run はデフォルトのコンピューティング サービス アカウントを使用します。

    • event-filters フラグには、トリガーがモニタリングするイベント フィルタを指定します。event-filters フィルタにすべて一致するイベントが、サービスの呼び出しをトリガーします。各トリガーには、サポートされているイベントタイプを指定する必要があります。作成後にイベント フィルタのタイプを変更することはできません。イベント フィルタのタイプを変更するには、新しいトリガーを作成して古いトリガーを削除する必要があります。(省略可)さらにフィルタを追加するには、--event-filters フラグを繰り返し、サポートされているフィルタを ATTRIBUTE=VALUE の形式で指定します。

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

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

任意のツールを使用して、手順のタブでクリックします。

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

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

    Cloud Run に移動します

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

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

  4. オプションを選択します。

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

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

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

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

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

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

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

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

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

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

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

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 リージョンに置き換えます。例: us-central1

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

    gcloud eventarc triggers create TRIGGER_NAME  \
        --location=REGION \
        --destination-run-service=FUNCTION  \
        --destination-run-region=REGION \
        --event-filters="EVENT_FILTER" \
        --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

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

    • TRIGGER_NAME: トリガーの名前。

    • EVENTARC_TRIGGER_LOCATION: Eventarc トリガーのロケーション。一般に、Eventarc トリガーのロケーションは、イベントをモニタリングするリソースのロケーションと一致する必要があります。 Google Cloud ほとんどの場合、関数も同じリージョンにデプロイする必要があります。詳細については、Eventarc のロケーションをご覧ください。

    • FUNCTION: デプロイする関数の名前。

    • REGION: 関数の Cloud Run リージョン

    • PROJECT_NUMBER は Google Cloud プロジェクト番号に置き換えます。Eventarc トリガーはサービス アカウントにリンクされ、関数を呼び出すときに ID として使用します。Eventarc トリガーのサービス アカウントには、関数を呼び出す権限が必要です。デフォルトでは、Cloud Run はデフォルトのコンピューティング サービス アカウントを使用します。

    • event-filters フラグには、トリガーがモニタリングするイベント フィルタを指定します。event-filters フィルタにすべて一致するイベントが関数の呼び出しをトリガーします。各トリガーには、サポートされているイベントタイプを指定する必要があります。作成後にイベント フィルタのタイプを変更することはできません。イベント フィルタのタイプを変更するには、新しいトリガーを作成して古いトリガーを削除する必要があります。(省略可)さらにフィルタを追加するには、--event-filters フラグを繰り返し、サポートされているフィルタを ATTRIBUTE=VALUE の形式で指定します。

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

CloudEvent ID とソースを表示する

サービスをトリガーした CloudEvent ID とソースを表示するには、Cloud Run サービスログで次のリソースを表示します。

  • LogEntry.labels.run.googleapis.com/cloud_event_id
  • LogEntry.labels.run.googleapis.com/cloud_event_source

リソースを参照してください。Cloud Run サービスログ

次のステップ