Google ソースからイベントを公開する

GoogleApiSource リソースを作成することで、特定の Eventarc Advanced バスに対して Google ソースからのイベントの収集と公開を有効にできます。

Google ソースからのイベントは、Cloud Run 関数の作成や Dataflow ジョブのステータス変更などの仲介なしのイベントによって直接トリガーされます。詳細については、Eventarc でサポートされている Google イベントタイプをご覧ください。

次の点にご注意ください。

  • デフォルトでは、イベントは GoogleApiSource リソースが存在する Google Cloud プロジェクトから収集されます。gcloud CLI を使用して、GoogleApiSource リソースと同じ組織内の複数のプロジェクトからイベントを収集することもできます。詳細については、このドキュメントの複数のプロジェクトからイベントをパブリッシュするをご覧ください。
  • GoogleApiSource リソースが存在するプロジェクトとは異なる Google Cloud プロジェクトにあるバスにイベントを公開できます。これは、gcloud CLI を使用するか、Eventarc API にリクエストを送信することで構成できます( Google Cloud コンソールからは構成できません)。
  • リージョンごとにプロジェクトあたり 1 つの GoogleApiSource リソースという上限があります。 Google Cloud

始める前に

作業を始める前に、次の手順を完了していることを確認してください。

  1. Google Cloud CLI を使用してこのページのコマンドを実行する場合は、gcloud CLI をインストールして初期化します。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新バージョンを取得します。

  2. Eventarc APIEventarc Publishing API を有効にします。

    コンソール

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

    gcloud

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

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

Google ソースからのイベントを有効にする

Google ソースからイベントを公開するには、GoogleApiSource リソースを作成する必要があります。このリソースは、特定の Eventarc Advanced バスの特定の Google Cloud プロジェクトにおける Google API イベントのサブスクリプションを表します。

Google ソースからのイベントのパブリッシュは、次の方法で有効にできます。

  • Google Cloud コンソールで
  • ターミナルまたは Cloud Shell で Google Cloud CLI を使用する
  • Eventarc API にリクエストを送信する

コンソール

  1. Google Cloud コンソールで、[Eventarc] > [バス] ページに移動します。

    [バス] に移動

  2. バスを作成するか、バスを更新する場合は [編集] をクリックします。

  3. [バスの編集] ページで、メッセージ ソースを追加するには、 [ソースを追加] をクリックします。

    1. [メッセージ ソースを追加] ペインで、Google API メッセージ プロバイダのデフォルトの google-api-source をそのまま使用するか、別のメッセージ ソース名を入力します。
    2. [作成] をクリックします。
  4. [保存] をクリックします。

gcloud

  1. ターミナルを開きます。

  2. Google ソースからのイベントを有効にするには、gcloud eventarc google-api-sources create コマンドを使用します。

    gcloud eventarc google-api-sources create GOOGLE_API_SOURCE_NAME \
        --destination-message-bus=BUS_NAME \
        --destination-message-bus-project=BUS_PROJECT_ID

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

    • GOOGLE_API_SOURCE_NAME: 特定のバスの Google API イベントのサブスクリプションを表す GoogleApiSource リソースの ID または完全修飾識別子
    • BUS_NAME: Google API イベントのサブスクライブ対象となるバスの ID または完全修飾 ID
    • BUS_PROJECT_ID: バスの Google Cloud プロジェクト ID

    省略可: 次のフラグも使用できます。

    • --async: 処理中のオペレーションの完了を待たずに、直ちにコマンドを終了します。
    • --crypto-key: 顧客管理の暗号鍵の完全修飾名を指定します。指定しない場合は、 Google-owned and managed keys が使用されます。
    • --logging-config: ロギングレベルを構成します。次のいずれかの値を指定する必要があります。NONEDEBUGINFONOTICEWARNINGERRORCRITICALALERTEMERGENCY。詳細については、LogSeverity をご覧ください。

REST API

Google ソースからのイベントを有効にするには、projects.locations.googleApiSources.create メソッドを使用します。

リクエストのデータを使用する前に、次のように置き換えます。

  • GOOGLE_API_SOURCE_NAME: 特定のバスの Google API イベントのサブスクリプションを表す GoogleApiSource リソースの表示名(例: my_google_source)。
  • LABEL_KEYLABEL_VALUE: 省略可。 Google Cloud リソースの整理に役立つラベルの Key-Value ペアのマップです。詳細については、ラベルとはをご覧ください。
  • ANNOTATION_KEYANNOTATION_VALUE: 省略可。自由形式のテキストのアノテーション キーと値のペアのマップ。これらを使用して、リソースに関連付けられた任意の情報を付加できます。詳細については、アノテーションをご覧ください。
  • DESTINATION: Google ソースイベントの公開先となる Eventarc Advanced バスの完全修飾識別子。形式は projects/PROJECT_NAME/locations/LOCATION/messageBuses/BUS_NAME です。詳細については、メッセージをルーティングするバスを作成するをご覧ください。
  • ENCRYPT_KEY: 省略可。GoogleApiSource リソースが projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME 形式のデータ暗号化に使用する Cloud KMS 鍵。詳細については、顧客管理の暗号鍵の使用をご覧ください。
  • PROJECT_ID: GoogleApiSource リソースを作成する Google Cloudプロジェクト ID。
  • LOCATION: GoogleApiSource リソースを作成するサポートされているリージョン(例: us-central1)。
  • LOG_SEVERITY: 省略可。ログエントリに記載されているイベントの最小重大度。NONEDEBUGINFONOTICEWARNINGERRORCRITICALALERTEMERGENCY のいずれか。デフォルトは NONE です。詳細については、LogSeverity をご覧ください。

リクエストの本文(JSON):

{
  "displayName": "GOOGLE_API_SOURCE_NAME",
  "labels": {"LABEL_KEY":"LABEL_VALUE"},
  "annotations": {"ANNOTATION_KEY":"ANNOTATION_VALUE"},
  "destination": "DESTINATION",
  "cryptoKeyName": "ENCRYPT_KEY",
  "loggingConfig": {"logSeverity":"LOG_SEVERITY"}
}

リクエストを送信するには、次のいずれかのオプションを展開します。

成功した場合、レスポンスの本文には、新しく作成された Operation のインスタンスが含まれます。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.eventarc.v1.OperationMetadata",
    "createTime": "2024-01-25T17:17:45.782370139Z",
    "target": "projects/PROJECT_ID/locations/LOCATION/googleApiSources/GOOGLE_API_SOURCE_NAME",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

GoogleApiSource リソースと同じ Google Cloud プロジェクト内の Google ソースからのイベントが収集され、バスに公開されるようになりました。

Google ソースからのイベントを無効にする

特定のGoogle Cloud プロジェクトの Google ソースから Eventarc Advanced バスへのイベントのパブリッシュを無効にするには、GoogleApiSource リソースを削除する必要があります。

Google ソースからのイベントのパブリッシュは、次の方法で無効にできます。

  • Google Cloud コンソールで
  • ターミナルまたは Cloud Shell で gcloud CLI を使用する
  • Eventarc API にリクエストを送信する

コンソール

  1. Google Cloud コンソールで、[Eventarc] > [バスの詳細] ページに移動します。

    [バスの詳細] に移動

  2. [ 編集] をクリックします。

  3. [バスの編集] ページで、Google API メッセージ プロバイダを削除するには、google-api-source メッセージ ソース(または指定した名前)の [リソースの削除] をクリックします。

  4. [リソースの削除] プロンプトで、[確認] をクリックします。

  5. [保存] をクリックします。

gcloud

  1. ターミナルを開きます。

  2. Google ソースからのイベントを無効にするには、gcloud eventarc google-api-sources delete コマンドを使用します。

    gcloud eventarc google-api-sources delete GOOGLE_API_SOURCE_NAME \
        --location=REGION

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

    • GOOGLE_API_SOURCE_NAME: GoogleApiSource リソースの ID または完全修飾識別子
    • REGION: GoogleApiSource リソースのロケーション

REST API

Google ソースからのイベントを無効にするには、projects.locations.googleApiSources.delete メソッドを使用します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: GoogleApiSource リソースが作成される Google Cloud プロジェクト ID。
  • LOCATION: GoogleApiSource リソースが作成されるリージョン(例: us-central1)。
  • GOOGLE_API_SOURCE_NAME: 削除する GoogleApiSource リソースの名前。

リクエストを送信するには、次のいずれかのオプションを展開します。

成功した場合、レスポンスの本文には、新しく作成された Operation のインスタンスが含まれます。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.eventarc.v1.OperationMetadata",
    "createTime": "2024-01-25T17:17:45.782370139Z",
    "target": "projects/PROJECT_ID/locations/LOCATION/googleApiSources/GOOGLE_API_SOURCE_NAME",
    "verb": "delete",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

削除された GoogleApiSource リソースと同じ Google Cloud プロジェクト内の Google ソースからのイベントは、収集および公開されなくなります。

複数のプロジェクトからイベントをパブリッシュする

複数の Google Cloud プロジェクトから Google ソースイベントを収集して公開するには、GoogleApiSource リソースを作成する必要があります。また、プロジェクトは GoogleApiSource リソースと同じ組織に属している必要があります。組織の詳細については、リソース階層をご覧ください。

次の点にご注意ください。

  • 複数のプロジェクトからのイベント パブリッシュは、gcloud CLI を使用して構成する必要があります。 Google Cloud コンソールには表示されません。
  • GoogleApiSource リソースを含むプロジェクトが別の組織に移動されると、複数のプロジェクトからのイベントのパブリッシュが想定どおりに機能しなくなります。GoogleApiSource リソースを更新または再作成する必要があります。

1. Eventarc サービス エージェントに適切な IAM ロールを付与する

組織レベルでイベントを収集するには、gcloud organizations add-iam-policy-binding コマンドを使用して、Eventarc サービス エージェントに適切な Identity and Access Management(IAM)ロールを付与します。

gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
    --member="SERVICE_AGENT_EMAIL" \
    --role="roles/eventarc.multiProjectEventCollector"

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

  • ORGANIZATION_ID: 組織リソース ID
  • SERVICE_AGENT_EMAIL: GoogleApiSource リソースを作成するプロジェクトの Eventarc プライマリ サービス エージェントのメールアドレス。メールアドレスは次の形式です。

    service-PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com
    

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

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

2. すべてのプロジェクトまたはプロジェクトのリストから公開する

複数のプロジェクトで Google ソースからイベントをパブリッシュするには、次のいずれかの方法で gcloud eventarc google-api-sources create コマンドを使用します。

  • GoogleApiSource リソースと同じ組織内のすべての Google Cloud プロジェクトから公開します。

    gcloud eventarc google-api-sources create GOOGLE_API_SOURCE_NAME \
        --location=REGION \
        --destination-message-bus=BUS_NAME \
        --destination-message-bus-project=BUS_PROJECT_ID \
        --organization-subscription
  • GoogleApiSource リソースと同じ組織内の Google Cloud プロジェクトのリストから公開します。

    gcloud eventarc google-api-sources create GOOGLE_API_SOURCE_NAME \
        --location=REGION \
        --destination-message-bus=BUS_NAME \
        --destination-message-bus-project=BUS_PROJECT_ID \
        --project-subscriptions=LIST_OF_PROJECTS

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

    • GOOGLE_API_SOURCE_NAME: GoogleApiSource リソースの ID または完全修飾識別子
    • REGION: GoogleApiSource リソースのロケーション
    • BUS_NAME: Google API イベントのサブスクライブ対象となるバスの ID または完全修飾 ID
    • BUS_PROJECT_ID: バスの Google Cloud プロジェクト ID
    • LIST_OF_PROJECTS:Google Cloud プロジェクト ID またはプロジェクト番号のカンマ区切りリスト。同じリスト内で ID と数字を組み合わせることができます。GoogleApiSource リソースを含むGoogle Cloud プロジェクトからイベントをパブリッシュするには、リストにプロジェクト ID または番号を明示的に含める必要があります。

次のステップ