バスと登録を作成してイベントをパブリッシュし、受信する(コンソール)

このクイックスタートでは、 Google Cloudプロジェクトで Eventarc Advanced バスを作成して登録し、イベント メッセージをパブリッシュして受信する方法について説明します。

  • バスを使用すると、システム内のメッセージ フローを一元化し、ルーターとして機能します。メッセージ ソースからイベント メッセージを受信するか、プロバイダによって公開されたイベント メッセージを受信し、登録に従って評価します。

  • 登録は、特定のバスへのサブスクリプションを識別し、メッセージの一致条件を定義します。これにより、メッセージは 1 つ以上の宛先にルーティングされます。

このクイックスタートでは、以下の操作を行います。

  1. サブネットを作成し、プライベート Google アクセスを有効にします。

  2. ネットワーク アタッチメントを作成する。

  3. Artifact Registry 標準リポジトリを作成します。

  4. イベント レシーバ サービスを Cloud Run にデプロイする。

  5. Eventarc Advanced バスを作成します。

  6. Eventarc Advanced 登録を作成します。

  7. イベント メッセージをバスにパブリッシュします。

  8. Cloud Run のログでイベントデータを確認します。

このクイックスタートのほとんどの手順は、 Google Cloud コンソールを使用して完了できます。Google Cloud CLI を使用してすべての手順を完了するには、バスと登録を作成してイベントをパブリッシュして受信する(gcloud CLI)をご覧ください。

始める前に

組織で定義されているセキュリティの制約により、次の手順を完了できない場合があります。トラブルシューティング情報については、制約のある Google Cloud 環境でアプリケーションを開発するをご覧ください。

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry, Cloud Build, Cloud Run, Compute Engine, and Eventarc APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Artifact Registry, Cloud Build, Cloud Run, Compute Engine, and Eventarc APIs.

    Enable the APIs

  8. このクイックスタートの手順の一部では、gcloud CLI を使用する必要があります。
    1. 次のいずれかの開発環境で gcloud CLI を設定します。

      Cloud Shell

      gcloud CLI がすでに設定されているオンライン ターミナルを使用するには、Cloud Shell をアクティブにします。

      このページの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。セッションが初期化されるまで数秒かかることがあります。

      ローカルシェル

      ローカル開発環境を使用する手順は次のとおりです。

      1. gcloud CLI をインストールします
      2. gcloud CLI を初期化します
    2. Google Cloud プロジェクトを選択します。
      gcloud config set project PROJECT_ID

      PROJECT_ID は、実際の Google Cloud プロジェクト名に置き換えます。

    3. gcloud コンポーネントを更新します。
      gcloud components update
    4. アカウントを使用してログインします。
      gcloud auth login
    5. このクイックスタートで使用する構成変数を設定します。
      REGION=us-central1
  9. プロジェクト作成者には、基本オーナーロールroles/owner)が付与されます。デフォルトでは、この Identity and Access Management(IAM)ロールには、ほとんどの Google Cloudリソースへのフルアクセスに必要な権限が含まれており、この手順は省略できます。

    プロジェクト作成者でない場合は、プロジェクトで適切なプリンシパルに必要な権限を付与する必要があります。プリンシパルは Google アカウント(エンドユーザーの場合)やサービス アカウント(アプリケーションとコンピューティング ワークロードの場合)になることもあります。

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

    必要な権限

    このクイックスタートを完了するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

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

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

  10. プロジェクトのロールを Compute Engine のデフォルト サービス アカウントに付与します。これらのロールは、コンテナ イメージをビルドしてデプロイするために必要です。
    1. Google Cloud コンソールで、[IAM] ページに移動します。

      [IAM] に移動

    2. リソースに対するロールをすでに持っているサービス アカウントのロールを変更するには、プリンシパルを含む行を見つけます。

      または

      リソースに対するロールを持たないサービス アカウントにロールを付与するには、[ アクセスを許可] をクリックし、次の形式で Compute Engine のデフォルト サービス アカウントの ID を入力します。

      PROJECT_NUMBER-compute@developer.gserviceaccount.com

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

    3. 対応する行の [ プリンシパルを編集します] をクリックします。
    4. [ ロールを追加] または [ 別のロールを追加] をクリックします。
    5. [ロールを選択] リストで、次のロールをフィルタして選択します。
    6. [保存] をクリックします。
  11. デフォルトでは、Cloud Run サービスを呼び出すことができるのは、プロジェクト オーナー、プロジェクト編集者、Cloud Run 管理者、Cloud Run 起動元のみです。認証を設定するには、 Google Cloud プロジェクトの Cloud Run 起動元ロールをサービス アカウントに付与します。テスト目的で、このサービス アカウントを Eventarc Advanced パイプラインに関連付けて、パイプラインの ID を示すこともできます。
    1. Google Cloud コンソールで、[サービス アカウント] ページに移動します。

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

    2. [ サービス アカウントを作成] をクリックします。
    3. サービス アカウント名を入力します。
    4. [作成して続行] をクリックします。
    5. [ロールを選択] リストで、[Cloud Run 起動元] のロールをフィルタして選択します。
    6. [完了] をクリックします。

    Cloud Run サービスにアクセスできるユーザーは、次のいずれかの方法で構成できます。

    • サービス アカウントまたはグループを選択して、サービスへのアクセスを許可する権限を付与します。すべてのリクエストには、いずれかの承認済みサービス アカウント用に Google によって署名された OpenID Connect トークンを含む HTTP 認証ヘッダーが必要です。このクイックスタートでは、この方法でアクセスを構成します。
    • 未認証のアクセスを許可する allUsers に権限を付与します。

    詳細については、Cloud Run のアクセス制御をご覧ください。

サブネットを作成して限定公開の Google アクセスを有効にする

禁止する組織のポリシーを作成しない限り、新しいプロジェクトは、各リージョンに 1 つのサブネットワーク(サブネット)を持つデフォルトの Virtual Private Cloud(VPC)ネットワーク(自動モードの VPC ネットワーク)が設定された状態で開始されます。 Google Cloudサブネットには IP アドレス範囲が関連付けられています。

DNS アドレスを使用して Cloud Run の宛先にメッセージを転送するため、ネットワーク アタッチメントで使用されるサブネットで限定公開の Google アクセスを有効にする必要があります。そうしないと、DNS アドレスを解決できません。プライベート ネットワーキングと Cloud Run の詳細については、VPC ネットワークからリクエストを受信するをご覧ください。

プロジェクトのデフォルト ネットワークにサブネットを作成し、限定公開の Google アクセスを有効にします。

  1. Google Cloud コンソールで、[VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. VPC ネットワークのリストで、[default] という名前をクリックします。

  3. [VPC ネットワークの詳細] ページで、[サブネット] タブをクリックします。

  4. [サブネットを追加] をクリックします。

  5. [サブネットを追加] ペインで、次の操作を行います。

    1. [名前] に入力します(例: my-subnet)。
    2. [リージョン] リストで [us-central1] を選択します。
    3. サブネットのプライマリ IPv4 範囲10.8.0.0/24 など)を入力します。
    4. [限定公開の Google アクセス] で [オン] を選択します。
    5. その他のデフォルトはすべてそのままにします。
    6. [追加] をクリックします。

サブネット IP の範囲は、VPC ネットワークとピアリングされた VPC ネットワーク内で一意であり、重複していない必要があります。サブネット タイプと有効なサブネット範囲の詳細については、サブネットをご覧ください。

ネットワーク アタッチメントを作成する

ネットワーク アタッチメントは、プロデューサー VPC ネットワークがコンシューマー VPC ネットワークへの接続を開始できるようにするリソースです。イベントを公開するために、Eventarc Advanced はネットワーク アタッチメントを使用して、VPC ネットワークでホストされているエンドポイントとの接続を確立します。

イベント宛先エンドポイントを含む同じネットワークとリージョンに、ネットワーク アタッチメントを作成します。このネットワーク アタッチメントは、ネットワーク アタッチメントを参照する Private Service Connect インターフェースからの接続を自動的に受け入れます。

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

    [Private Service Connect] に移動

  2. [ネットワーク アタッチメント] タブをクリックします。

  3. [ネットワーク アタッチメントの作成] をクリックします。

  4. [名前] に入力します(例: my-network-attachment)。

  5. [ネットワーク] リストで、[default] を選択します。

  6. [リージョン] リストで [us-central1 (Iowa)] を選択します。

  7. [サブネットワーク] リストで、以前に作成したサブネットを選択します。

  8. [すべてのプロジェクトの接続を自動的に受け入れる] をクリックします。

  9. [ネットワーク アタッチメントの作成] をクリックします。

Artifact Registry 標準リポジトリを作成する

コンテナ イメージを保存する Artifact Registry 標準リポジトリを作成します。

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

    [リポジトリ] に移動

  2. [リポジトリを作成] をクリックします。

  3. [名前] に入力します(例: my-repo)。

    プロジェクト内のリポジトリのロケーションごとに、リポジトリ名は一意でなければなりません。

  4. リポジトリの [形式] で [Docker] を選択します。

  5. [リージョン] リストで [us-central1 (Iowa)] を選択します。

  6. その他のデフォルトはすべてそのままにします。

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

イベント レシーバ サービスを Cloud Run にデプロイする

イベントの内容をログに記録する Cloud Run サービスをデプロイします。このサービスには、同じプロジェクト内の VPC ネットワークからのみアクセスできます。また、このサービスでは認証された呼び出しのみが許可されているため、サービス URL に直接アクセスすることはできません。

  1. ターミナルで、GitHub リポジトリのクローンを作成します。

    git clone https://github.com/GoogleCloudPlatform/eventarc-samples.git
  2. Cloud Run のサンプルコードが含まれているディレクトリに移動します。

    cd eventarc-samples/eventarc-advanced-quickstart/
  3. Docker コンテナ イメージをビルドし、イメージをリポジトリに push します。

    gcloud builds submit \
        --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/log-events:v1

    REPOSITORY を Artifact Registry リポジトリの名前に置き換えます。

  4. コンテナ イメージを Cloud Run にデプロイします。

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

      Cloud Run に移動

    2. [ コンテナをデプロイ] > [サービス] をクリックします。

    3. [既存のコンテナ イメージから 1 つのリビジョンをデプロイする] を選択します。

    4. [コンテナ イメージの URL] で、[選択] をクリックして、以前に作成した Artifact Registry コンテナ イメージを指定します。

    5. 必要に応じて、サービス名my-service など)を変更できます。

    6. [リージョン] リストで [us-central1 (Iowa)] を選択します。

    7. [認証] で、[認証が必要] を選択します。

    8. [上り(内向き)] で [内部] を選択します。

    9. その他のデフォルトはすべてそのままにします。

    10. [作成] をクリックし、デプロイが完了するまで待ちます。

Eventarc Advanced バスを作成する

バスは、メッセージ ソースからイベント メッセージを受信するか、プロバイダによってパブリッシュされたイベント メッセージを受信し、メッセージ ルーターとして機能します。

詳細については、メッセージを転送するバスを作成するをご覧ください。

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

    [バス] に移動

  2. [ バスを作成] をクリックします。

  3. [バスの作成] ページで、次の操作を行います。

    1. バス名を入力します(例: my-bus)。
    2. [リージョン] リストで [us-central1 (Iowa)] を選択します。
  4. その他のデフォルトはすべてそのままにします。

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

Eventarc Advanced の登録を作成する

登録により、宛先にルーティングされるメッセージが決定され、イベント メッセージの宛先を構成するために使用されるパイプラインも指定されます。

詳細については、イベントを受信する登録を作成するをご覧ください。

Google Cloud コンソールを使用すると、登録とパイプラインを同時に作成できます。

  1. 登録を作成するには、 Google Cloud コンソールで、[Eventarc] > [パイプライン] ページに移動します。

    [パイプライン] に移動

  2. [パイプラインを作成] をクリックします。

  3. [パイプラインの詳細] ペインで、次の操作を行います。

    1. パイプライン名を入力します(例: my-pipeline)。
    2. [リージョン] リストで、[us-central1(アイオワ)] を選択します。パイプラインは、バスと同じリージョンに作成する必要があります。
    3. その他のデフォルトはすべてそのままにします。
    4. [続行] をクリックします。
  4. [登録] ペインで、次の操作を行います。

    1. [登録を追加] をクリックします。
    2. [登録名] に入力します(例: my-enrollment)。
    3. [Eventarc Advanced Bus] リストで、前に作成したバスを選択します。
    4. [CEL 式] フィールドに、CEL を使用して評価式を記述します。次に例を示します。

      message.type == "hello-world-type"

    5. [完了] をクリックします。

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

    7. [イベント メディエーション] ペインで、再度 [続行] をクリックします。

  5. [送信先] ペインで、次の操作を行います。

    1. [宛先タイプ] リストで、[Cloud Run サービス(HTTP 経由)] を選択し、以前に作成した Cloud Run サービスを選択します。

    2. [ネットワーク アタッチメント] リストで、以前に作成したネットワーク アタッチメントを選択します。

    3. [認証を有効にする] チェックボックスをオンにします。

      1. [Auth ヘッダー] リストで、[OIDC トークン] を選択します。

      2. [サービス アカウント] リストで、以前に作成した宛先サービスを呼び出すサービス アカウントを選択します。このサービス アカウントのメールアドレスは、OIDC トークンの生成に使用されます。

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

イベント メッセージをバスにパブリッシュする

バスにメッセージを直接パブリッシュするには、gcloud beta eventarc message-buses publish コマンドを使用するか、Eventarc Publishing REST API にリクエストを送信します。詳細については、イベントを直接公開するをご覧ください。

メッセージは、イベントデータを一般的な方法で記述するための仕様である CloudEvents 形式である必要があります。data 要素は、イベントのペイロードです。このフィールドには、整形式の JSON を指定できます。CloudEvents コンテキスト属性の詳細については、イベント形式をご覧ください。

gcloud CLI と --event-data フラグやその他のイベント属性フラグを使用して、Eventarc Advanced バスにイベントをパブリッシュします。

gcloud beta eventarc message-buses publish BUS_NAME \
    --event-data='{"key": "hello-world-data"}' \
    --event-id=hello-world-id-1234 \
    --event-source=hello-world-source \
    --event-type=hello-world-type \
    --event-attributes="datacontenttype=application/json" \
    --location=$REGION

または、gcloud CLI と --json-message フラグを使用して、Eventarc Advanced バスに JSON メッセージとしてイベントをパブリッシュします。

gcloud beta eventarc message-buses publish BUS_NAME \
    --location=$REGION \
    --json-message='{"id": "hello-world-id-1234", "type":
 "hello-world-type", "source":
 "hello-world-source", "specversion": "1.0", "data":
 {"key": "hello-world-data"}}'

イベントを公開すると、「イベントが正常に公開されました」というメッセージが表示されます。

Cloud Run のログでイベントデータを表示する

Eventarc Advanced バスにイベントをパブリッシュした後、Cloud Run サービスのログを調べて、イベントが想定どおりに受信されたことを確認できます。

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

    Cloud Run に移動

  2. [サービス] ページで、サービスの名前をクリックします。

  3. [Logs] タブをクリックします。

  4. ログエントリをフィルタして、出力を返すことができます。たとえば、hello-world-data を検索できます。

  5. 次のようなログエントリを探します。

    2025-02-27 08:36:44.350 EST [2025-02-27 13:36:44,352] INFO in server: Body: b'{"key": "hello-world-data"}'
    

Eventarc Advanced バスと登録が正常に作成され、イベント メッセージがバスにパブリッシュされ、イベント レシーバ サービスのログで期待される結果が確認されました。

クリーンアップ

このクイックスタートに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。

  1. VPC サブネットを削除する

  2. VPC ネットワーク アタッチメントを削除する

  3. Artifact Registry リポジトリを削除します

  4. Cloud Run サービスを削除する

  5. Eventarc Advanced リソースを削除します。

    1. 登録を削除する

    2. パイプラインを削除する

    3. バスを削除する

また、 Google Cloud プロジェクトを削除して、料金が発生しないようにすることもできます。 Google Cloud プロジェクトを削除すると、そのプロジェクト内で使用されているすべてのリソースに対する課金が停止します。

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

次のステップ