バスと登録を作成してイベントをパブリッシュおよび受信する(コンソール)
このクイックスタートでは、Eventarc Advanced バスを作成してプロジェクトに登録し、イベント メッセージをパブリッシュして受信する方法について説明します。 Google Cloud
バスを使用すると、システム内のメッセージのフローを集中管理し、ルータとして機能させることができます。メッセージ ソースから受信したイベント メッセージやプロバイダによって公開されたイベント メッセージを、登録に従って評価します。
登録は、特定のバスへのサブスクリプションを識別し、メッセージの一致条件を定義して、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 Writer: Artifact Registry アーティファクトをアップロードする
- ログ書き込み: Cloud Logging にログを書き込みます。
- Storage オブジェクト ユーザー: Cloud Storage オブジェクトにアクセスします。
- [保存] をクリックします。
- Google Cloud コンソールの [IAM] ページに移動します。
- デフォルトでは、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 ネットワークのリストで、デフォルトの名前をクリックします。
[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] ページに移動します。
[> [Service] をクリックします。
Deploy container][既存のコンテナ イメージから 1 つのリビジョンをデプロイする] を選択します。
[コンテナ イメージの URL] で [選択] をクリックし、前に作成した Artifact Registry コンテナ イメージを指定します。
必要に応じて、サービス名を変更できます(
my-service
など)。[リージョン] リストで [us-central1 (Iowa)] を選択します。
[認証] で [認証が必要] を選択します。
[上り(内向き)] で [内部] を選択します。
その他はすべてデフォルトのままにします。
[作成] をクリックし、デプロイが完了するまで待ちます。
Eventarc Advanced バスを作成する
バスは、メッセージ送信元から受信したイベント メッセージまたはプロバイダによってパブリッシュされたイベント メッセージを受信し、メッセージ ルーターとして機能します。
詳細については、メッセージを転送するバスを作成するをご覧ください。
Google Cloud コンソールで、[Eventarc] > [バス] ページに移動します。
[
Create bus] をクリックします。[バスを作成する] ページで、次の操作を行います。
- バス名を入力します(例:
my-bus
)。 - [リージョン] リストで [us-central1 (Iowa)] を選択します。
- バス名を入力します(例:
その他はすべてデフォルトのままにします。
[作成] をクリックします。
Eventarc Advanced の登録を作成する
登録では、宛先に転送されるメッセージを決定し、イベント メッセージの宛先の構成に使用されるパイプラインを指定します。
詳細については、イベントを受信する登録を作成するをご覧ください。
Google Cloud コンソールを使用する場合は、登録とパイプラインを同時に作成できます。
登録を作成するには、Google Cloud コンソールで [Eventarc] > [パイプライン] ページに移動します。
[Create pipeline] をクリックします。
[パイプラインの詳細] ペインで、次の操作を行います。
- パイプライン名を入力します(例:
my-pipeline
)。 - [リージョン] リストで、[us-central1(アイオワ)] を選択します。パイプラインは、バスと同じリージョンに作成する必要があります。
- その他すべてのデフォルトを受け入れます。
- [続行] をクリックします。
- パイプライン名を入力します(例:
[登録] ペインで、次の操作を行います。
- [登録を追加] をクリックします。
- 登録名を入力します(例:
my-enrollment
)。 - [Eventarc Advanced バス] リストで、前に作成したバスを選択します。
[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.