Pub/Sub メッセージを使用してイベントを受信する(gcloud CLI)
このクイックスタートでは、Eventarc を使用して Pub/Sub トピックからイベントを受信する宛先として Google Kubernetes Engine(GKE)サービスを設定する方法について説明します。
このクイックスタートでは、以下の作業を行います。
- Eventarc がイベントを pull してターゲットに転送できるように、サービス アカウントを設定します。
- GKE クラスタを作成する。
- Eventarc で GKE の宛先を初期化する。
- イベントを受信する GKE サービスをデプロイする。
- Pub/Sub トピックを GKE サービスに接続する Eventarc トリガーを作成する。
- Pub/Sub イベントを生成して表示する。
始める前に
- Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google Cloud プロジェクトを作成または選択します。
-
Cloud プロジェクトを作成します。
gcloud projects create PROJECT_ID
-
作成した Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
-
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google Cloud プロジェクトを作成または選択します。
-
Cloud プロジェクトを作成します。
gcloud projects create PROJECT_ID
-
作成した Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
-
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
- gcloud コンポーネントを更新します。
gcloud components update
- Eventarc、Resource Manager、Google Kubernetes Engine の各 API を有効にします。
gcloud services enable eventarc.googleapis.com \ cloudresourcemanager.googleapis.com \ container.googleapis.com
- このクイックスタートで使用する構成変数を設定します。
PROJECT_ID=$(gcloud config get-value project) TRIGGER_SA=eventarc-sa CLUSTER_NAME=events-cluster SERVICE_NAME=hello-gke
Google サービス アカウントを設定する
Eventarc がイベント フォワーダー コンポーネントを使用して Pub/Sub からイベントを pull できるように、ユーザー管理のサービス アカウントを設定して特定のロールを付与します。
トリガーの作成に使用される
TRIGGER_SA
というサービス アカウントを作成します。gcloud iam service-accounts create $TRIGGER_SA
サービス アカウントに
pubsub.subscriber
ロールとmonitoring.metricWriter
ロールを付与します。gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_SA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/pubsub.subscriber" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_SA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/monitoring.metricWriter"
GKE クラスタを作成する
GKE クラスタは、少なくとも 1 つのクラスタ コントロール プレーン マシンと、ノードと呼ばれる複数のワーカーマシンで構成されます。ノードは Compute Engine 仮想マシン(VM)インスタンスであり、自身をクラスタの一部にするために必要な Kubernetes プロセスを実行します。アプリケーションをクラスタにデプロイすると、そのアプリケーションがこれらのノードで実行されます。
events-cluster
という名前の Autopilot クラスタを作成します。
gcloud container clusters create-auto $CLUSTER_NAME --region us-central1
クラスタの作成が完了するまでに数分かかることがあります。クラスタの作成が完了すると、出力は次のようになります。
Creating cluster events-cluster...done.
Created [https://container.googleapis.com/v1/projects/MY_PROJECT
/zones/us-central1/clusters/events-cluster].
[...]
STATUS: RUNNING
これにより、Google Cloud プロジェクト ID が MY_PROJECT
のプロジェクトに、events-cluster
という名前の GKE クラスタが作成されます。
GKE の宛先を有効にする
Eventarc は、GKE サービスをターゲットとするトリガーごとに、Pub/Sub からイベントを pull してターゲットに転送するイベント フォワーダー コンポーネントを作成します。コンポーネントを作成し、GKE クラスタでリソースを管理するには、Eventarc サービス エージェントに権限を付与します。
Eventarc 用に GKE の宛先を有効にします。
gcloud eventarc gke-destinations init
必要なロールをバインドするよう求められたら、「
y
」と入力します。サービス アカウントに次のロールが割り当てられます。
compute.viewer
container.developer
iam.serviceAccountAdmin
GKE サービスの宛先を作成する
ビルド済みのイメージ gcr.io/cloudrun/hello
を使用して、イベントを受信してログに記録する GKE サービスをデプロイします。
Kubernetes は、
kubeconfig
という名前の YAML ファイルを使用して、kubectl
のクラスタ認証情報を格納します。GKE クラスタのkubectl
を指すように、認証情報とエンドポイント情報を使用してkubeconfig
ファイルを更新します。gcloud container clusters get-credentials $CLUSTER_NAME \ --region us-central1
Kubernetes Deployment を作成します。
kubectl create deployment $SERVICE_NAME \ --image=gcr.io/cloudrun/hello
これを Kubernetes Service として公開します。
kubectl expose deployment $SERVICE_NAME \ --type ClusterIP --port 80 --target-port 8080
Eventarc トリガーを作成する
Pub/Sub トピックにメッセージが公開されると、Eventarc トリガーによって hello-gke
GKE サービスにメッセージが送信されます。
Pub/Sub メッセージをリッスンする GKE トリガーを作成します。
新しい Pub/Sub トピック
gcloud eventarc triggers create gke-trigger-pubsub \ --location="us-central1" \ --destination-gke-cluster=events-cluster \ --destination-gke-location=us-central1 \ --destination-gke-namespace=default \ --destination-gke-service=hello-gke \ --destination-gke-path=/ \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account=$TRIGGER_SA@$PROJECT_ID.iam.gserviceaccount.com
これにより、新しい Pub/Sub トピックと
gke-trigger-pubsub
というトリガーが作成されます。既存の Pub/Sub トピック
gcloud eventarc triggers create gke-trigger-pubsub \ --location="us-central1" \ --destination-gke-cluster=events-cluster \ --destination-gke-location=us-central1 \ --destination-gke-namespace=default \ --destination-gke-service=hello-gke \ --destination-gke-path=/ \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account=$TRIGGER_SA@$PROJECT_ID.iam.gserviceaccount.com \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID
次のように置き換えます。
PROJECT_ID
: 実際の Google Cloud プロジェクト IDTOPIC_ID
: 既存の Pub/Sub トピックの ID。これにより、既存の Pub/Sub トピックにgke-trigger-pubsub
というトリガーが作成されます。
トリガーが正常に作成されたことを確認します。トリガーが完全に機能するまで 2 分ほどかかることがあります。
gcloud eventarc triggers list
出力例を以下に示します。
NAME: gke-trigger-pubsub TYPE: google.cloud.pubsub.topic.v1.messagePublished DESTINATION: GKE: hello-gke ACTIVE: Yes LOCATION: us-central1
イベントを生成して表示する
Pub/Sub トピックにメッセージを公開することで、GKE サービスをトリガーするイベントを生成できます。その後、Pod のログでメッセージを確認できます。
Pub/Sub トピックを検索して、環境変数として設定します。
TOPIC=$(gcloud eventarc triggers describe gke-trigger-pubsub --location=us-central1 --format='value(transport.pubsub.topic)')
Pub/Sub トピックにメッセージを送信してイベントを生成します。
gcloud pubsub topics publish $TOPIC --message="Hello World"
GKE サービスがイベントのメッセージをログに記録します。
イベント メッセージを表示するには:
Pod ID を見つけます。
kubectl get pods
出力例を以下に示します。NAME READY STATUS RESTARTS AGE hello-gke-645964f578-2mjjt 1/1 Running 0 35s
次のステップで使用する Pod のNAME
をコピーします。Pod のログを確認します。
kubectl logs NAME
NAME
は、コピーした Pod の名前に置き換えます。次のようなログエントリを探します。
2022/02/24 22:23:49 Hello from Cloud Run! The container started successfully and is listening for HTTP requests on $PORT {"severity":"INFO","eventType":"google.cloud.pubsub.topic.v1.messagePublished","message":"Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: Hello World"[...]}
クリーンアップ
サービスが使用されていない場合、Cloud Run の料金は発生しませんが、Container Registry へのコンテナ イメージの保存、Eventarc リソース、Pub/Sub メッセージ、GKE クラスタに対して Cloud Run の料金が発生する場合があります。
イメージの削除、Pub/Sub トピックの削除、Pub/Sub サブスクリプションの削除、GKE クラスタの削除を行うことができます。
Eventarc トリガーを削除するには:
gcloud eventarc triggers delete gke-trigger-pubsub
また、Google Cloud プロジェクトを削除して、料金が発生しないようにすることもできます。Cloud プロジェクトを削除すると、そのプロジェクト内で使用されているすべてのリソースに対する課金が停止します。
gcloud projects delete PROJECT_ID_OR_NUMBER
PROJECT_ID_OR_NUMBER
は、プロジェクト ID またはプロジェクト番号に置き換えます。