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

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

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

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

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

始める前に

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

    プロジェクト セレクタに移動

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

  4. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

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

  6. Google Cloud CLI をインストールして初期化します。デフォルトのコンピューティング リージョンを構成するように求められたら、「n」と入力します。
  7. gcloud コンポーネントを更新します。
    gcloud components update
  8. Google Cloud、Cloud Build、Resource Manager、Google Kubernetes Engine API、Container Registry、Eventarc API を有効にします。
    gcloud services enable cloudapis.googleapis.com
    gcloud services enable cloudbuild.googleapis.com
    gcloud services enable cloudresourcemanager.googleapis.com
    gcloud services enable container.googleapis.com
    gcloud services enable containerregistry.googleapis.com
    gcloud services enable eventarc.googleapis.com
    
  9. このクイックスタートで使用する構成変数を設定します。
    gcloud config set project PROJECT_ID
    gcloud config set run/cluster events-cluster
    gcloud config set run/cluster_location us-central1
    gcloud config set run/platform gke
    gcloud config set eventarc/location us-central1
    PROJECT_ID は、実際の Google Cloud プロジェクト ID に置き換えます。
  10. 省略可: 次のように入力すると、gcloud_name を使用して構成を確認できます。
    gcloud config list
    出力例を以下に示します。
    [eventarc]
    location = us-central1
    [run]
    cluster = events-cluster
    cluster_location = us-central1
    platform = gke

GKE クラスタを作成する

HttpLoadBalancing アドオンを使用して GKE クラスタを作成します。Workload Identity を有効にして、GKE 内で実行されているアプリケーションから Google Cloud サービスにアクセスできるようにします。

PROJECT_ID=$(gcloud config get-value project)

gcloud beta container clusters create events-cluster \
  --addons=HttpLoadBalancing \
  --machine-type=n1-standard-4 \
  --enable-autoscaling --min-nodes=2 --max-nodes=10 \
  --no-issue-client-certificate --num-nodes=2  \
  --logging=SYSTEM,WORKLOAD \
  --monitoring=SYSTEM \
  --scopes=cloud-platform,logging-write,monitoring-write,pubsub \
  --zone us-central1 \
  --release-channel=rapid \
  --workload-pool=$PROJECT_ID.svc.id.goog

クラスタの作成が完了するまで待機します。作成プロセス中の警告は無視できます。クラスタの作成が完了すると、出力は次のようになります。

Creating cluster events-cluster...done.
Created [https://container.googleapis.com/v1beta1/projects/my-project/zones/us-central1/clusters/events-cluster].

ここで my-project は、Google Cloud プロジェクト ID です。

これにより、my-projectevents-cluster という名前の GKE クラスタが作成されます。

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

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

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

    TRIGGER_GSA=eventarc-gke-triggers
    gcloud iam service-accounts create $TRIGGER_GSA
  2. サービス アカウントに pubsub.subscriber ロールと monitoring.metricWriter ロールを付与します。

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
      --role "roles/pubsub.subscriber"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
      --role "roles/monitoring.metricWriter"

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 Deployment を作成します。

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

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

Pub/Sub トリガーを作成する

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

  1. Pub/Sub メッセージをリッスンする GKE トリガーを作成します。

    新しい Pub/Sub トピック

    gcloud eventarc triggers create gke-trigger-pubsub \
      --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_GSA@$PROJECT_ID.iam.gserviceaccount.com
    

    これにより、新しい Pub/Sub トピックと gke-trigger-pubsub というトリガーが作成されます。

    既存の Pub/Sub トピック

    gcloud eventarc triggers create gke-trigger-pubsub \
      --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_GSA@$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
    

イベントを生成して表示する

Pub/Sub トピックにメッセージを公開することで、GKE サービスをトリガーするイベントを生成できます。その後、Pod のログでメッセージを確認できます。

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

    TOPIC=$(gcloud eventarc triggers describe gke-trigger-pubsub --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
      ここで、NAME は 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)