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

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

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

  • 登録は、特定のバスへのサブスクリプションを識別し、メッセージの一致条件を定義して、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 管理者、起動元のみです。認証を設定するには、 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 ネットワークのリストで、デフォルトの名前をクリックします。

  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. [ Deploy container] > [Service] をクリックします。

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

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

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

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

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

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

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

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

Eventarc Advanced バスを作成する

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

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

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

    [バス] に移動

  2. [ Create bus] をクリックします。

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

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

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

Eventarc Advanced の登録を作成する

登録では、宛先に転送されるメッセージを決定し、イベント メッセージの宛先の構成に使用されるパイプラインを指定します。

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

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

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

    [Pipelines] に移動

  2. [Create pipeline] をクリックします。

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

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

    1. [登録を追加] をクリックします。
    2. 登録名を入力します(例: my-enrollment)。
    3. [Eventarc Advanced バス] リストで、前に作成したバスを選択します。
    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.

次のステップ