コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。
クイックスタート: Pub/Sub メッセージを使用してイベントを受信する(Google Cloud CLI)

Pub/Sub メッセージを使用してイベントを受信する(gcloud CLI)

このクイックスタートでは、Eventarc を使用して Pub/Sub トピックからイベントを受信する宛先として Google Kubernetes Engine(GKE)サービスを設定する方法について説明します。

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

  1. Eventarc がイベントを pull してターゲットに転送できるように、サービス アカウントを設定します。
  2. GKE クラスタを作成する。
  3. Eventarc で GKE の宛先を初期化する。
  4. イベントを受信する GKE サービスをデプロイする。
  5. Pub/Sub トピックを GKE サービスに接続する Eventarc トリガーを作成する。
  6. Pub/Sub イベントを生成して表示する。

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud CLI をインストールします。
  3. gcloud CLI を初期化するには:

    gcloud init
  4. Google Cloud プロジェクトを作成または選択します。

    • Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID
    • 作成した Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID
  5. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

  6. Google Cloud CLI をインストールします。
  7. gcloud CLI を初期化するには:

    gcloud init
  8. Google Cloud プロジェクトを作成または選択します。

    • Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID
    • 作成した Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID
  9. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

  10. gcloud コンポーネントを更新します。
    gcloud components update
  11. Eventarc、Resource Manager、Google Kubernetes Engine の各 API を有効にします。
    gcloud services enable eventarc.googleapis.com \
      cloudresourcemanager.googleapis.com \
      container.googleapis.com
  12. このクイックスタートで使用する構成変数を設定します。
    PROJECT_ID=$(gcloud config get-value project)
    TRIGGER_SA=eventarc-sa
    CLUSTER_NAME=events-cluster
    SERVICE_NAME=hello-gke

Google サービス アカウントを設定する

Eventarc がイベント フォワーダー コンポーネントを使用して Pub/Sub からイベントを pull できるように、ユーザー管理のサービス アカウントを設定して特定のロールを付与します。

  1. トリガーの作成に使用される TRIGGER_SA というサービス アカウントを作成します。

    gcloud iam service-accounts create $TRIGGER_SA
  2. サービス アカウントに 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 サービス エージェントに権限を付与します。

  1. Eventarc 用に GKE の宛先を有効にします。

    gcloud eventarc gke-destinations init
    
  2. 必要なロールをバインドするよう求められたら、「y」と入力します。

    サービス アカウントに次のロールが割り当てられます。

    • compute.viewer
    • container.developer
    • iam.serviceAccountAdmin

GKE サービスの宛先を作成する

ビルド済みのイメージ gcr.io/cloudrun/hello を使用して、イベントを受信してログに記録する GKE サービスをデプロイします。

  1. Kubernetes は、kubeconfig という名前の YAML ファイルを使用して、kubectl のクラスタ認証情報を格納します。GKE クラスタの kubectl を指すように、認証情報とエンドポイント情報を使用して kubeconfig ファイルを更新します。

    gcloud container clusters get-credentials $CLUSTER_NAME \
      --region us-central1
    
  2. Kubernetes Deployment を作成します。

    kubectl create deployment $SERVICE_NAME \
      --image=gcr.io/cloudrun/hello
    
  3. これを Kubernetes Service として公開します。

    kubectl expose deployment $SERVICE_NAME \
      --type ClusterIP --port 80 --target-port 8080
    

Eventarc トリガーを作成する

Pub/Sub トピックにメッセージが公開されると、Eventarc トリガーによって hello-gke GKE サービスにメッセージが送信されます。

  1. 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 プロジェクト ID
    • TOPIC_ID: 既存の Pub/Sub トピックの ID。これにより、既存の Pub/Sub トピックに gke-trigger-pubsub というトリガーが作成されます。
  2. トリガーが正常に作成されたことを確認します。トリガーが完全に機能するまで 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 のログでメッセージを確認できます。

  1. Pub/Sub トピックを検索して、環境変数として設定します。

    TOPIC=$(gcloud eventarc triggers describe gke-trigger-pubsub --location=us-central1 --format='value(transport.pubsub.topic)')
    
  2. Pub/Sub トピックにメッセージを送信してイベントを生成します。

    gcloud pubsub topics publish $TOPIC --message="Hello World"
    

    GKE サービスがイベントのメッセージをログに記録します。

  3. イベント メッセージを表示するには:

    1. Pod ID を見つけます。

      kubectl get pods
      
      出力例を以下に示します。
      NAME                                         READY   STATUS             RESTARTS   AGE
      hello-gke-645964f578-2mjjt                   1/1     Running            0          35s
      次のステップで使用する Pod の NAME をコピーします。

    2. Pod のログを確認します。

      kubectl logs NAME
      NAME は、コピーした Pod の名前に置き換えます。

    3. 次のようなログエントリを探します。

      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 またはプロジェクト番号に置き換えます。

次のステップ

Cloud Audit Logs を使用してイベントを受信する(Google Cloud CLI)