Eventarc を使用して GKE 用の BigQuery 処理パイプラインを構築する

このチュートリアルでは、Eventarc を使用して、一般公開 BigQuery データセットに対するクエリのスケジューリング、データに基づいたグラフの生成、メールによるグラフのリンクの共有を行う処理パイプラインを構築する方法について説明します。

目標

このチュートリアルでは、GKE クラスタで実行され、Eventarc を使用してイベントを受信する 3 つの Google Kubernetes Engine(GKE)サービスをビルドしてデプロイします。

  1. Query Runner - Cloud Scheduler ジョブが Pub/Sub トピックにメッセージを公開するとトリガーされます。このサービスは、BigQuery API を使用して一般公開の COVID-19 データセットからデータを取得し、結果を新しい BigQuery テーブルに保存します。
  2. Chart Creator - Query Runner サービスが Pub/Sub トピックにメッセージを公開するとトリガーされます。このサービスは、Python プロット ライブラリ(Matplotlib)を使用してグラフを生成し、Cloud Storage バケットに保存します。
  3. Notifier - Chart Creator サービスが Cloud Storage バケットにグラフを保存すると監査ログによってトリガーされます。このサービスは、メールサービス(SendGrid)を使用して、グラフのリンクをメールアドレスに送信します。

次の図は、アーキテクチャの概要を示しています。

BigQuery 処理パイプラインのアーキテクチャの概要

費用

このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。

新規の Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

始める前に

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

  3. 外部 ID プロバイダ(IdP)を使用している場合は、まず フェデレーション ID を使用して gcloud CLI にログインする必要があります。

  4. gcloud CLI を初期化するには、次のコマンドを実行します。

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

    プロジェクトの選択または作成に必要なロール

    • プロジェクトを選択する: プロジェクトを選択する際に、特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトを選択できます。
    • プロジェクトを作成する: プロジェクトを作成するには、resourcemanager.projects.create 権限を含むプロジェクト作成者のロール(roles/resourcemanager.projectCreator)が必要です。詳しくは、ロールを付与する方法をご覧ください。
    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、 Google Cloud プロジェクトの名前に置き換えます。

  6. Google Cloud プロジェクトに対して課金が有効になっていることを確認します。

  7. Artifact Registry、BigQuery、Cloud Build、Cloud Logging、Cloud Scheduler、Eventarc、GKE、Pub/Sub、Resource Manager API を有効にします(まだ有効になっていない場合)。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法を学習する。

    gcloud services enable artifactregistry.googleapis.com bigquery.googleapis.com cloudbuild.googleapis.com cloudresourcemanager.googleapis.com cloudscheduler.googleapis.com container.googleapis.com eventarc.googleapis.com pubsub.googleapis.com logging.googleapis.com
  8. Google Cloud CLI をインストールします。

  9. 外部 ID プロバイダ(IdP)を使用している場合は、まず フェデレーション ID を使用して gcloud CLI にログインする必要があります。

  10. gcloud CLI を初期化するには、次のコマンドを実行します。

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

    プロジェクトの選択または作成に必要なロール

    • プロジェクトを選択する: プロジェクトを選択する際に、特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトを選択できます。
    • プロジェクトを作成する: プロジェクトを作成するには、resourcemanager.projects.create 権限を含むプロジェクト作成者のロール(roles/resourcemanager.projectCreator)が必要です。詳しくは、ロールを付与する方法をご覧ください。
    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、 Google Cloud プロジェクトの名前に置き換えます。

  12. Google Cloud プロジェクトに対して課金が有効になっていることを確認します。

  13. Artifact Registry、BigQuery、Cloud Build、Cloud Logging、Cloud Scheduler、Eventarc、GKE、Pub/Sub、Resource Manager API を有効にします(まだ有効になっていない場合)。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法を学習する。

    gcloud services enable artifactregistry.googleapis.com bigquery.googleapis.com cloudbuild.googleapis.com cloudresourcemanager.googleapis.com cloudscheduler.googleapis.com container.googleapis.com eventarc.googleapis.com pubsub.googleapis.com logging.googleapis.com
  14. Cloud Storage 向けには、ADMIN_READ、DATA_WRITE、DATA_READ のデータアクセス タイプの監査ロギングを有効にします。

    1. Google Cloud プロジェクト、フォルダ、組織に関連付けられた Identity and Access Management(IAM)ポリシーを読み取り、一時ファイルに保存します。
      gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
    2. テキスト エディタで /tmp/policy.yaml を開き、auditConfigs セクションで監査ログの構成のみを追加または変更します。

      
        auditConfigs:
        - auditLogConfigs:
          - logType: ADMIN_READ
          - logType: DATA_WRITE
          - logType: DATA_READ
          service: storage.googleapis.com
        bindings:
        - members:
        [...]
        etag: BwW_bHKTV5U=
        version: 1
    3. 新しい IAM ポリシーを作成します。

      gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml

      上記のコマンドで別の変更との競合が報告された場合は、IAM ポリシーの読み取りからやり直してください。詳細については、API でデータアクセス監査ログを構成するをご覧ください。

  15. このチュートリアルで使用するデフォルトを設定します。
    CLUSTER_NAME=events-cluster
    CLUSTER_LOCATION=us-central1
    PROJECT_ID=PROJECT_ID
    gcloud config set project $PROJECT_ID
    gcloud config set eventarc/location $CLUSTER_LOCATION

    PROJECT_ID は、実際のプロジェクト ID に置き換えます。

SendGrid API キーを作成する

SendGrid はクラウドベースのメール プロバイダで、メールサーバーを維持せずにメールを送信できます。

  1. SendGrid にログインし、[Settings] > [API キー] に移動します。
  2. [API キーを作成] をクリックします。
  3. キーの権限を選択します。メールを送信するには、キーに少なくとも Mail send(メール送信)の権限が必要です。
  4. [Save] をクリックして、キーを作成します。
  5. SendGrid によって、新しいキーが生成されます。これは、キーの唯一のコピーであるため、後で使用できるようにキーをコピーして保存してください。

GKE クラスタを作成する

Workload Identity Federation for GKE を有効にしてクラスタを作成し、GKE 内で実行されているアプリケーションから Google Cloud サービスにアクセスできるようにします。Eventarc を使用してイベントを転送するには、Workload Identity Federation for GKE も必要です。

  1. HttpLoadBalancing アドオンと HorizontalPodAutoscaling アドオンを有効にして GKE クラスタを作成します。

    gcloud container clusters create $CLUSTER_NAME \
        --addons=HttpLoadBalancing,HorizontalPodAutoscaling \
        --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 \
        --region=$CLUSTER_LOCATION \
        --release-channel=rapid \
        --workload-pool=$PROJECT_ID.svc.id.goog
    
  2. クラスタの作成が完了するまで数分待ちます。処理中に、無視しても問題のない警告が表示されることがあります。クラスタが作成されると、出力は次のようになります。

    Creating cluster ...done.
    Created [https://container.googleapis.com/v1/projects/my-project/zones/us-central1/clusters/events-cluster].
    
  3. GKE クラスタの kubectl を指すように、認証情報とエンドポイント情報を使用して kubeconfig ファイルを更新します。

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --region=$CLUSTER_LOCATION
  4. Docker コンテナ イメージを保存する Artifact Registry 標準リポジトリを作成します。

    gcloud artifacts repositories create REPOSITORY \
        --repository-format=docker \
        --location=$CLUSTER_LOCATION

    REPOSITORY は、リポジトリの一意の名前に置き換えます。

サービス アカウントを構成する

  1. GKE ノードが Artifact Registry からコンテナ イメージを pull できるようにするには、クラスタノードで使用される Compute Engine のデフォルトのサービス アカウントに、プロジェクトに対する Artifact Registry 読み取り(roles/artifactregistry.reader)ロールを付与します。

    PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
      --condition=None \
      --role "roles/artifactregistry.reader"
  2. GKE サービスが BigQuery のクエリと書き込み、Pub/Sub へのパブリッシュ、Cloud Storage へのグラフのアップロードを行えるようにするには、プロジェクトに対する BigQuery データ編集者(roles/bigquery.dataEditor)、BigQuery ジョブユーザー(roles/bigquery.jobUser)、Pub/Sub パブリッシャー(roles/pubsub.publisher)、ストレージ オブジェクト管理者(roles/storage.objectAdmin)のロールを、default Namespace の default Kubernetes ServiceAccount に付与します。

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/default" \
      --condition=None \
      --role "roles/bigquery.dataEditor"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/default" \
      --condition=None \
      --role "roles/bigquery.jobUser"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/default" \
      --condition=None \
      --role "roles/pubsub.publisher"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/default" \
      --condition=None \
      --role "roles/storage.objectAdmin"

GKE の宛先を有効にする

Eventarc が GKE クラスタ内のリソースを管理できるようにするには、GKE の宛先を有効にし、Eventarc サービス アカウントを必要なロールにバインドします。

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

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

    次のロールがバインドされます。

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

Cloud Storage バケットを作成する

グラフを保存する Cloud Storage バケットを GKE サービスと同じリージョンに作成し、生成されたグラフを表示するための読み取りアクセス権(roles/storage.objectViewer)をアカウントに付与します。

export BUCKET="$(gcloud config get-value core/project)-charts"
gcloud storage buckets create gs://${BUCKET} --location=$CLUSTER_LOCATION
gcloud storage buckets update gs://${BUCKET} --uniform-bucket-level-access
gcloud storage buckets add-iam-policy-binding gs://${BUCKET} \
    --member="user:$(gcloud config get-value core/account)" \
    --role=roles/storage.objectViewer

リポジトリのクローンを作成する

GitHub リポジトリのクローンを作成します。

git clone https://github.com/GoogleCloudPlatform/eventarc-samples
cd eventarc-samples/processing-pipelines

サービス アカウントを作成してアクセスロールをバインドする

Eventarc トリガーを作成する前に、ユーザー管理のサービス アカウントを設定して特定のロールを付与し、Eventarc が Pub/Sub イベントを転送できるようにします。

  1. eventarc-triggers-test-sa という名前のサービス アカウントを作成します。

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

    PROJECT_ID=$(gcloud config get-value project)
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
        --condition=None \
        --role "roles/pubsub.subscriber"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
        --condition=None \
        --role "roles/monitoring.metricWriter"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
        --condition=None \
        --role "roles/eventarc.eventReceiver"

Notifier サービスをデプロイする

bigquery/notifier/python ディレクトリから、GKE サービスをデプロイします。このサービスは、Chart Creator イベントを受信し、SendGrid を使用して、生成されたグラフへのリンクをメールで送信します。

  1. コンテナ イメージをビルドして push します。

    pushd bigquery/notifier/python
    export SERVICE_NAME=notifier
    docker build -t $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 .
    docker push $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
    popd
  2. コンテナ イメージの Kubernetes Deployment を作成し、メールの送信先アドレスや SendGrid API キーなどの必要な環境変数を設定します。

    export TO_EMAILS=EMAIL_ADDRESS
    export SENDGRID_API_KEY=YOUR_SENDGRID_API_KEY
    kubectl create deployment ${SERVICE_NAME} \
        --image=$CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
    kubectl set env deployment/${SERVICE_NAME} \
        TO_EMAILS=${TO_EMAILS} \
        SENDGRID_API_KEY=${SENDGRID_API_KEY} \
        BUCKET=${BUCKET}

    次のように置き換えます。

    • EMAIL_ADDRESS: 生成されたグラフのリンクを送信するメールアドレス
    • YOUR_SENDGRID_API_KEY: 前にメモした SendGrid API キー
    • REPOSITORY: Artifact Registry リポジトリの名前
  3. Deployment を Kubernetes Service として公開します。

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

Notifier サービスのトリガーを作成する

GKE にデプロイされた Notifier サービスの Eventarc トリガーを作成します。このトリガーは、指定された Cloud Storage バケットの Cloud Storage 監査ログをフィルタリングします。ここで、methodName は storage.objects.create です。

gcloud eventarc triggers create trigger-${SERVICE_NAME}-gke \
      --destination-gke-cluster=$CLUSTER_NAME \
      --destination-gke-location=$CLUSTER_LOCATION \
      --destination-gke-namespace=default \
      --destination-gke-service=$SERVICE_NAME \
      --destination-gke-path=/ \
      --event-filters="type=google.cloud.audit.log.v1.written" \
      --event-filters="serviceName=storage.googleapis.com" \
      --event-filters="methodName=storage.objects.create" \
      --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET/objects/*" \
      --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com

これにより、trigger-notifier-gke というトリガーが作成されます。

Chart Creator サービスをデプロイする

bigquery/chart-creator/python ディレクトリで、Query Runner イベントを受信し、特定の国の BigQuery テーブルからデータを取得して、そのデータから Matplotlib を使用してグラフを生成する GKE サービスをデプロイします。グラフが Cloud Storage バケットにアップロードされます。

  1. コンテナ イメージをビルドして push します。

    pushd bigquery/chart-creator/python
    export SERVICE_NAME=chart-creator
    docker build -t $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 .
    docker push $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
    popd
  2. コンテナ イメージの Kubernetes Deployment を作成し、BUCKET 環境変数を設定します。

    kubectl create deployment ${SERVICE_NAME} \
        --image=$CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
    kubectl set env deployment/${SERVICE_NAME} \
        BUCKET=${BUCKET}
  3. Deployment を Kubernetes Service として公開します。

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

Chart Creator サービスのトリガーを作成する

GKE にデプロイされた Chart Creator サービスの Eventarc トリガーを作成します。このトリガーは、Pub/Sub トピックに公開されたメッセージをフィルタします。

  1. トリガーを作成します。

    gcloud eventarc triggers create trigger-${SERVICE_NAME}-gke \
        --destination-gke-cluster=$CLUSTER_NAME \
        --destination-gke-location=$CLUSTER_LOCATION \
        --destination-gke-namespace=default \
        --destination-gke-service=$SERVICE_NAME \
        --destination-gke-path=/ \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com

    これにより、trigger-chart-creator-gke というトリガーが作成されます。

  2. Pub/Sub トピックの環境変数を設定します。

    export TOPIC_QUERY_COMPLETED=$(basename $(gcloud eventarc triggers describe trigger-${SERVICE_NAME}-gke --format='value(transport.pubsub.topic)'))

Query Runner サービスをデプロイする

processing-pipelines ディレクトリで、Cloud Scheduler イベントを受信し、一般公開の COVID-19 データセットからデータを取得して、結果を新しい BigQuery テーブルに保存する GKE サービスをデプロイします。

  1. コンテナ イメージをビルドして push します。

    export SERVICE_NAME=query-runner
    docker build -t $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 -f Dockerfile .
    docker push $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
  2. コンテナ イメージの Kubernetes デプロイを作成し、PROJECT_ID と TOPIC_ID の環境変数を設定します。

    kubectl create deployment ${SERVICE_NAME} \
        --image=$CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
    kubectl set env deployment/${SERVICE_NAME} \
        PROJECT_ID=$(gcloud config get-value project) \
        TOPIC_ID=${TOPIC_QUERY_COMPLETED}
  3. Deployment を Kubernetes Service として公開します。

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

Query Runner サービスのトリガーを作成する

GKE にデプロイされた Query Runner サービスの Eventarc トリガーを作成します。このトリガーは、Pub/Sub トピックに公開されたメッセージをフィルタします。

  1. トリガーを作成します。

    gcloud eventarc triggers create trigger-${SERVICE_NAME}-gke \
        --destination-gke-cluster=$CLUSTER_NAME \
        --destination-gke-location=$CLUSTER_LOCATION \
        --destination-gke-namespace=default \
        --destination-gke-service=$SERVICE_NAME \
        --destination-gke-path=/ \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com

    これにより、trigger-query-runner-gke というトリガーが作成されます。

  2. Pub/Sub トピックの環境変数を設定します。

    export TOPIC_QUERY_SCHEDULED=$(basename $(gcloud eventarc triggers describe trigger-${SERVICE_NAME}-gke --format='value(transport.pubsub.topic)'))

ジョブのスケジュール設定

処理パイプラインは、2 つの Cloud Scheduler ジョブによってトリガーされます。1 日に 1 回 Pub/Sub トピックに公開する Cloud Scheduler ジョブを 2 つ作成します。

gcloud scheduler jobs create pubsub cre-scheduler-uk \
      --location=$CLUSTER_LOCATION \
      --schedule="0 16 * * *" \
      --topic=${TOPIC_QUERY_SCHEDULED} \
      --message-body="United Kingdom"
gcloud scheduler jobs create pubsub cre-scheduler-cy \
      --location=$CLUSTER_LOCATION \
      --schedule="0 17 * * *" \
      --topic=${TOPIC_QUERY_SCHEDULED} \
      --message-body="Cyprus"

スケジュールは unix-cron 形式で指定します。たとえば、0 16 * * * はジョブが毎日午後 4 時(UTC)に実行されることを意味します。

パイプラインの実行

  1. すべてのトリガーが正常に作成されたことを確認します。

    gcloud eventarc triggers list

    出力は次のようになります。

    NAME                       TYPE                                            DESTINATION         ACTIVE  LOCATION
    trigger-chart-creator-gke  google.cloud.pubsub.topic.v1.messagePublished   GKE:chart-creator   Yes     us-central1
    trigger-notifier-gke       google.cloud.audit.log.v1.written               GKE:notifier        Yes     us-central1
    trigger-query-runner-gke   google.cloud.pubsub.topic.v1.messagePublished   GKE:query-runner    Yes     us-central1
    
  2. Cloud Scheduler ジョブ ID を取得します。

    gcloud scheduler jobs list --location=$CLUSTER_LOCATION

    出力は次のようになります。

    ID                LOCATION      SCHEDULE (TZ)         TARGET_TYPE  STATE
    cre-scheduler-cy  us-central1   0 17 * * * (Etc/UTC)  Pub/Sub      ENABLED
    cre-scheduler-uk  us-central1   0 16 * * * (Etc/UTC)  Pub/Sub      ENABLED
    
  3. ジョブは毎日午後 4 時から午後 5 時に実行されるようにスケジュールされていますが、Cloud Scheduler ジョブを手動で実行することもできます。

    gcloud scheduler jobs run cre-scheduler-cy --location=$CLUSTER_LOCATION
    gcloud scheduler jobs run cre-scheduler-uk --location=$CLUSTER_LOCATION
  4. 数分後、Cloud Storage バケットに 2 つのグラフが作成されていることを確認します。

    gcloud storage ls gs://${BUCKET}

    出力は次のようになります。

    gs://PROJECT_ID-charts/chart-cyprus.png
    gs://PROJECT_ID-charts/chart-unitedkingdom.png
    

これで、グラフのリンクを含むメールが 2 通届いたはずです。

クリーンアップ

このチュートリアル用に新規プロジェクトを作成した場合は、そのプロジェクトを削除します。既存のプロジェクトを使用していて、このチュートリアルで行った変更を追加せずに残す場合は、チュートリアル用に作成したリソースを削除します。

    Google Cloud プロジェクトを削除する:

    gcloud projects delete PROJECT_ID

チュートリアル リソースの削除

  1. このチュートリアルでデプロイした Kubernetes サービスとデプロイを削除し、GKE クラスタを削除します。

    kubectl delete service notifier chart-creator query-runner
    kubectl delete deployment notifier chart-creator query-runner
    gcloud container clusters delete $CLUSTER_NAME --region=$CLUSTER_LOCATION
  2. このチュートリアルで作成した Eventarc トリガーをすべて削除します。

    gcloud eventarc triggers delete TRIGGER_NAME
    

    TRIGGER_NAME は実際のトリガー名に置き換えます。

  3. Artifact Registry からイメージを削除します。

    gcloud artifacts docker images delete $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/notifier:v1
    gcloud artifacts docker images delete $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/chart-creator:v1
    gcloud artifacts docker images delete $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/query-runner:v1
  4. Artifact Registry リポジトリを削除します。

    gcloud artifacts repositories delete REPOSITORY \
        --location=$CLUSTER_LOCATION
  5. バケット内のすべてのオブジェクトと一緒にバケットを削除します。

    gcloud storage rm --recursive gs://${BUCKET}/
  6. Cloud Scheduler ジョブを削除します。

    gcloud scheduler jobs delete cre-scheduler-cy --location=$CLUSTER_LOCATION
    gcloud scheduler jobs delete cre-scheduler-uk --location=$CLUSTER_LOCATION
  7. チュートリアルの設定で追加した Google Cloud CLI のデフォルト構成を削除します。

    gcloud config unset project
    gcloud config unset eventarc/location

次のステップ