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

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

  • バスは中央ルーターとして機能し、イベントソースからメッセージを受信するか、プロバイダによって公開されたメッセージを受信します。

  • 登録は、バスで受信したメッセージを処理パイプラインを介して 1 つ以上の宛先にルーティングします。

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

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

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

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

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

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

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

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

始める前に

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

  1. Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオで Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分も差し上げます。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry, Cloud Build, Cloud Run, Compute Engine, and Eventarc APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Artifact Registry, Cloud Build, Cloud Run, Compute Engine, and Eventarc APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    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. テスト用にサービス アカウントを作成し、このクイックスタートを完了するために必要なロールを付与します。サービス アカウントを使用してコンテナ イメージをビルドしてデプロイし、Eventarc Advanced パイプラインに関連付けて、パイプラインの ID を表します。
    1. Google Cloud コンソールで、[サービス アカウント] ページに移動します。

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

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

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

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

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

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

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

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

    [リポジトリ] に移動

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

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

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

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

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

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

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

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

イベントの内容をログに記録する Cloud Run サービスをデプロイします。Pub/Sub トピック、Workflows、HTTP エンドポイントなど、他のイベント宛先もサポートされています。詳細については、イベント プロバイダと宛先をご覧ください。

  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 \
        --service-account=projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --default-buckets-behavior=regional-user-owned-bucket

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

    • REPOSITORY: Artifact Registry リポジトリの名前。
    • SERVICE_ACCOUNT_NAME: 前に作成したサービス アカウントの名前。
  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. [上り(内向き)] で [すべて] を選択します。

      これにより、インターネットから run.app の URL に直接送信されるリクエストを含むすべてのリクエストが許可されます。詳細については、Cloud Run のネットワーク上り(内向き)を制限するをご覧ください。

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

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

Eventarc Advanced バスを作成する

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

詳細については、メッセージをルーティングするバスを作成するをご覧ください。

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

    [Bus] に移動

  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 バス] リストで、前に作成したバスを選択します。
    4. [CEL 式] フィールドに、CEL を使用して評価式を記述します。次に例を示します。

      message.type == "hello-world-type"
      
    5. [完了] をクリックします。

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

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

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

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

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

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

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

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

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

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

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

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

gcloud 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 フラグを使用して、JSON メッセージとして Eventarc Advanced バスにイベントをパブリッシュします。

gcloud 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. [ログ] タブをクリックします。

  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. Artifact Registry リポジトリを削除します。

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

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

    1. 登録を削除する。

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

    3. バスを削除する。

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

  1. Google Cloud コンソールで [リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ