バスと登録を作成してイベントをパブリッシュし、受信する(コンソール)
このクイックスタートでは、 Google Cloudプロジェクトで Eventarc Advanced バスを作成して登録し、イベント メッセージをパブリッシュして受信する方法について説明します。
バスを使用すると、システム内のメッセージ フローを一元化し、ルーターとして機能します。メッセージ ソースからイベント メッセージを受信するか、プロバイダによって公開されたイベント メッセージを受信し、登録に従って評価します。
登録は、特定のバスへのサブスクリプションを識別し、メッセージの一致条件を定義します。これにより、メッセージは 1 つ以上の宛先にルーティングされます。
このクイックスタートでは、以下の操作を行います。
サブネットを作成し、プライベート Google アクセスを有効にします。
ネットワーク アタッチメントを作成する。
Artifact Registry 標準リポジトリを作成します。
イベント レシーバ サービスを Cloud Run にデプロイする。
Eventarc Advanced バスを作成します。
Eventarc Advanced 登録を作成します。
イベント メッセージをバスにパブリッシュします。
Cloud Run のログでイベントデータを確認します。
このクイックスタートのほとんどの手順は、 Google Cloud コンソールを使用して完了できます。Google Cloud CLI を使用してすべての手順を完了するには、バスと登録を作成してイベントをパブリッシュして受信する(gcloud CLI)をご覧ください。
始める前に
組織で定義されているセキュリティの制約により、次の手順を完了できない場合があります。トラブルシューティング情報については、制約のある Google Cloud 環境でアプリケーションを開発するをご覧ください。
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, Compute Engine, and Eventarc APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, Compute Engine, and Eventarc APIs.
- このクイックスタートの手順の一部では、gcloud CLI を使用する必要があります。
- 次のいずれかの開発環境で gcloud CLI を設定します。
Cloud Shell
gcloud CLI がすでに設定されているオンライン ターミナルを使用するには、Cloud Shell をアクティブにします。
このページの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。セッションが初期化されるまで数秒かかることがあります。
ローカルシェル
ローカル開発環境を使用する手順は次のとおりです。
- Google Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
PROJECT_ID
は、実際の Google Cloud プロジェクト名に置き換えます。 gcloud
コンポーネントを更新します。gcloud components update
- アカウントを使用してログインします。
gcloud auth login
- このクイックスタートで使用する構成変数を設定します。
REGION=us-central1
- 次のいずれかの開発環境で gcloud CLI を設定します。
-
プロジェクト作成者には、基本オーナーロール(
roles/owner
)が付与されます。デフォルトでは、この Identity and Access Management(IAM)ロールには、ほとんどの Google Cloudリソースへのフルアクセスに必要な権限が含まれており、この手順は省略できます。プロジェクト作成者でない場合は、プロジェクトで適切なプリンシパルに必要な権限を付与する必要があります。プリンシパルは Google アカウント(エンドユーザーの場合)やサービス アカウント(アプリケーションとコンピューティング ワークロードの場合)になることもあります。
デフォルトでは、Cloud Build の権限には、Artifact Registry アーティファクトをアップロードおよびダウンロードするための権限が含まれています。
必要な権限
このクイックスタートを完了するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
Cloud Build 編集者(
roles/cloudbuild.builds.editor
) - Cloud Run 管理者(
roles/run.admin
) -
Eventarc デベロッパー (
roles/eventarc.developer
) -
Eventarc メッセージバス管理者 (
roles/eventarc.messageBusAdmin
) -
ログ表示アクセス者(
roles/logging.viewAccessor
) -
プロジェクト IAM 管理者(
roles/resourcemanager.projectIamAdmin
) -
サービス アカウント管理者(
roles/iam.serviceAccountAdmin
) -
サービス アカウント ユーザー(
roles/iam.serviceAccountUser
) -
Service Usage 管理者(
roles/serviceusage.serviceUsageAdmin
)
ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。
-
Cloud Build 編集者(
- プロジェクトのロールを Compute Engine のデフォルト サービス アカウントに付与します。これらのロールは、コンテナ イメージをビルドしてデプロイするために必要です。
- Google Cloud コンソールで、[IAM] ページに移動します。
リソースに対するロールをすでに持っているサービス アカウントのロールを変更するには、プリンシパルを含む行を見つけます。
または
リソースに対するロールを持たないサービス アカウントにロールを付与するには、[
アクセスを許可] をクリックし、次の形式で Compute Engine のデフォルト サービス アカウントの ID を入力します。PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_NUMBER
は、使用する Google Cloudプロジェクト番号に置き換えます。プロジェクト番号は、 Google Cloud コンソールの [ようこそ] ページで確認できます。- 対応する行の [ プリンシパルを編集します] をクリックします。
- [ ロールを追加] または [ 別のロールを追加] をクリックします。
- [ロールを選択] リストで、次のロールをフィルタして選択します。
- Artifact Registry 書き込みロール: Artifact Registry アーティファクトをアップロードする
- ログ書き込み: Cloud Logging にログを書き込みます
- Storage オブジェクト ユーザー: Cloud Storage オブジェクトにアクセスします
- [保存] をクリックします。
- Google Cloud コンソールで、[IAM] ページに移動します。
- デフォルトでは、Cloud Run サービスを呼び出すことができるのは、プロジェクト オーナー、プロジェクト編集者、Cloud Run 管理者、Cloud Run 起動元のみです。認証を設定するには、 Google Cloud プロジェクトの Cloud Run 起動元ロールをサービス アカウントに付与します。テスト目的で、このサービス アカウントを Eventarc Advanced パイプラインに関連付けて、パイプラインの ID を示すこともできます。
- Google Cloud コンソールで、[サービス アカウント] ページに移動します。
- [ サービス アカウントを作成] をクリックします。
- サービス アカウント名を入力します。
- [作成して続行] をクリックします。
- [ロールを選択] リストで、[Cloud Run 起動元] のロールをフィルタして選択します。
- [完了] をクリックします。
Cloud Run サービスにアクセスできるユーザーは、次のいずれかの方法で構成できます。
- サービス アカウントまたはグループを選択して、サービスへのアクセスを許可する権限を付与します。すべてのリクエストには、いずれかの承認済みサービス アカウント用に Google によって署名された OpenID Connect トークンを含む HTTP 認証ヘッダーが必要です。このクイックスタートでは、この方法でアクセスを構成します。
- 未認証のアクセスを許可する
allUsers
に権限を付与します。
詳細については、Cloud Run のアクセス制御をご覧ください。
- Google Cloud コンソールで、[サービス アカウント] ページに移動します。
サブネットを作成して限定公開の Google アクセスを有効にする
禁止する組織のポリシーを作成しない限り、新しいプロジェクトは、各リージョンに 1 つのサブネットワーク(サブネット)を持つデフォルトの Virtual Private Cloud(VPC)ネットワーク(自動モードの VPC ネットワーク)が設定された状態で開始されます。 Google Cloudサブネットには IP アドレス範囲が関連付けられています。
DNS アドレスを使用して Cloud Run の宛先にメッセージを転送するため、ネットワーク アタッチメントで使用されるサブネットで限定公開の Google アクセスを有効にする必要があります。そうしないと、DNS アドレスを解決できません。プライベート ネットワーキングと Cloud Run の詳細については、VPC ネットワークからリクエストを受信するをご覧ください。
プロジェクトのデフォルト ネットワークにサブネットを作成し、限定公開の Google アクセスを有効にします。
Google Cloud コンソールで、[VPC ネットワーク] ページに移動します。
VPC ネットワークのリストで、[default] という名前をクリックします。
[VPC ネットワークの詳細] ページで、[サブネット] タブをクリックします。
[サブネットを追加] をクリックします。
[サブネットを追加] ペインで、次の操作を行います。
- [名前] に入力します(例:
my-subnet
)。 - [リージョン] リストで [us-central1] を選択します。
- サブネットのプライマリ IPv4 範囲(
10.8.0.0/24
など)を入力します。 - [限定公開の Google アクセス] で [オン] を選択します。
- その他のデフォルトはすべてそのままにします。
- [追加] をクリックします。
- [名前] に入力します(例:
サブネット IP の範囲は、VPC ネットワークとピアリングされた VPC ネットワーク内で一意であり、重複していない必要があります。サブネット タイプと有効なサブネット範囲の詳細については、サブネットをご覧ください。
ネットワーク アタッチメントを作成する
ネットワーク アタッチメントは、プロデューサー VPC ネットワークがコンシューマー VPC ネットワークへの接続を開始できるようにするリソースです。イベントを公開するために、Eventarc Advanced はネットワーク アタッチメントを使用して、VPC ネットワークでホストされているエンドポイントとの接続を確立します。
イベント宛先エンドポイントを含む同じネットワークとリージョンに、ネットワーク アタッチメントを作成します。このネットワーク アタッチメントは、ネットワーク アタッチメントを参照する Private Service Connect インターフェースからの接続を自動的に受け入れます。
Google Cloud コンソールで、[Private Service Connect] に移動します。
[ネットワーク アタッチメント] タブをクリックします。
[ネットワーク アタッチメントの作成] をクリックします。
[名前] に入力します(例:
my-network-attachment
)。[ネットワーク] リストで、[default] を選択します。
[リージョン] リストで [us-central1 (Iowa)] を選択します。
[サブネットワーク] リストで、以前に作成したサブネットを選択します。
[すべてのプロジェクトの接続を自動的に受け入れる] をクリックします。
[ネットワーク アタッチメントの作成] をクリックします。
Artifact Registry 標準リポジトリを作成する
コンテナ イメージを保存する Artifact Registry 標準リポジトリを作成します。
Google Cloud コンソールで、[リポジトリ] ページに移動します。
[リポジトリを作成] をクリックします。
[名前] に入力します(例:
my-repo
)。プロジェクト内のリポジトリのロケーションごとに、リポジトリ名は一意でなければなりません。
リポジトリの [形式] で [Docker] を選択します。
[リージョン] リストで [us-central1 (Iowa)] を選択します。
その他のデフォルトはすべてそのままにします。
[作成] をクリックします。
イベント レシーバ サービスを Cloud Run にデプロイする
イベントの内容をログに記録する Cloud Run サービスをデプロイします。このサービスには、同じプロジェクト内の VPC ネットワークからのみアクセスできます。また、このサービスでは認証された呼び出しのみが許可されているため、サービス URL に直接アクセスすることはできません。
ターミナルで、GitHub リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/eventarc-samples.git
Cloud Run のサンプルコードが含まれているディレクトリに移動します。
cd eventarc-samples/eventarc-advanced-quickstart/
Docker コンテナ イメージをビルドし、イメージをリポジトリに push します。
gcloud builds submit \ --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/log-events:v1
REPOSITORY
を Artifact Registry リポジトリの名前に置き換えます。コンテナ イメージを Cloud Run にデプロイします。
Google Cloud コンソールで、[Cloud Run] ページに移動します。
[> [サービス] をクリックします。
コンテナをデプロイ][既存のコンテナ イメージから 1 つのリビジョンをデプロイする] を選択します。
[コンテナ イメージの URL] で、[選択] をクリックして、以前に作成した Artifact Registry コンテナ イメージを指定します。
必要に応じて、サービス名(
my-service
など)を変更できます。[リージョン] リストで [us-central1 (Iowa)] を選択します。
[認証] で、[認証が必要] を選択します。
[上り(内向き)] で [内部] を選択します。
その他のデフォルトはすべてそのままにします。
[作成] をクリックし、デプロイが完了するまで待ちます。
Eventarc Advanced バスを作成する
バスは、メッセージ ソースからイベント メッセージを受信するか、プロバイダによってパブリッシュされたイベント メッセージを受信し、メッセージ ルーターとして機能します。
詳細については、メッセージを転送するバスを作成するをご覧ください。
Google Cloud コンソールで、[Eventarc] > [バス] ページに移動します。
[
バスを作成] をクリックします。[バスの作成] ページで、次の操作を行います。
- バス名を入力します(例:
my-bus
)。 - [リージョン] リストで [us-central1 (Iowa)] を選択します。
- バス名を入力します(例:
その他のデフォルトはすべてそのままにします。
[作成] をクリックします。
Eventarc Advanced の登録を作成する
登録により、宛先にルーティングされるメッセージが決定され、イベント メッセージの宛先を構成するために使用されるパイプラインも指定されます。
詳細については、イベントを受信する登録を作成するをご覧ください。
Google Cloud コンソールを使用すると、登録とパイプラインを同時に作成できます。
登録を作成するには、 Google Cloud コンソールで、[Eventarc] > [パイプライン] ページに移動します。
[パイプラインを作成] をクリックします。
[パイプラインの詳細] ペインで、次の操作を行います。
- パイプライン名を入力します(例:
my-pipeline
)。 - [リージョン] リストで、[us-central1(アイオワ)] を選択します。パイプラインは、バスと同じリージョンに作成する必要があります。
- その他のデフォルトはすべてそのままにします。
- [続行] をクリックします。
- パイプライン名を入力します(例:
[登録] ペインで、次の操作を行います。
- [登録を追加] をクリックします。
- [登録名] に入力します(例:
my-enrollment
)。 - [Eventarc Advanced Bus] リストで、前に作成したバスを選択します。
[CEL 式] フィールドに、CEL を使用して評価式を記述します。次に例を示します。
message.type == "hello-world-type"
[完了] をクリックします。
[続行] をクリックします。
[イベント メディエーション] ペインで、再度 [続行] をクリックします。
[送信先] ペインで、次の操作を行います。
[宛先タイプ] リストで、[Cloud Run サービス(HTTP 経由)] を選択し、以前に作成した Cloud Run サービスを選択します。
[ネットワーク アタッチメント] リストで、以前に作成したネットワーク アタッチメントを選択します。
[認証を有効にする] チェックボックスをオンにします。
[Auth ヘッダー] リストで、[OIDC トークン] を選択します。
[サービス アカウント] リストで、以前に作成した宛先サービスを呼び出すサービス アカウントを選択します。このサービス アカウントのメールアドレスは、OIDC トークンの生成に使用されます。
[作成] をクリックします。
イベント メッセージをバスにパブリッシュする
バスにメッセージを直接パブリッシュするには、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 サービスのログを調べて、イベントが想定どおりに受信されたことを確認できます。
Google Cloud コンソールで、[Cloud Run] ページに移動します。
[サービス] ページで、サービスの名前をクリックします。
[Logs] タブをクリックします。
ログエントリをフィルタして、出力を返すことができます。たとえば、
hello-world-data
を検索できます。次のようなログエントリを探します。
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 バスと登録が正常に作成され、イベント メッセージがバスにパブリッシュされ、イベント レシーバ サービスのログで期待される結果が確認されました。
クリーンアップ
このクイックスタートに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。
Eventarc Advanced リソースを削除します。
また、 Google Cloud プロジェクトを削除して、料金が発生しないようにすることもできます。 Google Cloud プロジェクトを削除すると、そのプロジェクト内で使用されているすべてのリソースに対する課金が停止します。
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.