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

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

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

  • 登録は、バスが受信したメッセージを 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 プロダクトのパフォーマンスを評価してください。 Google Cloud新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $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.

    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

  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.

    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

  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. [完了] をクリックします。

    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. コンソールで、[Cloud Run] ページに移動します。 Google Cloud

      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. コンソールで、[Eventarc] [>] [バス] ページに移動します。 Google Cloud

    [バス] に移動

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

  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 (Iowa)] を選択します。 パイプラインは、バスと同じリージョンに作成する必要があります。
    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 フラグを使用して、Eventarc Advanced バスにイベントを JSON メッセージとしてパブリッシュします。

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. コンソールで、[Cloud Run] ページに移動します。 Google Cloud

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

  2. Cloud Run サービスを削除します

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

    1. 登録を削除します

    2. パイプラインを削除します

    3. バスを削除します

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

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

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

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

次のステップ