- 自動クイック スタート プールのサイズ の増減をスケジューリングします。
- 定期的なスケジュールでワークステーションを自動的に起動します。
このチュートリアルは、通常の営業時間に合わせてクイック スタート プールのサイズを増減するのに役立ちます。
目標
- ワークステーション構成のクイックスタート プールのサイズを更新する Cloud Run サービスを作成してデプロイします。
- 手順 1 で作成したサービスを PST の営業時間に合わせて月曜日から金曜日の 09:00~17:00 に実行するようにスケジュールする Cloud Scheduler ジョブを構成します。
費用
このドキュメントでは、課金対象である次のコンポーネントを使用します。 Google Cloud
- Cloud Scheduler
- Cloud Run
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
- アカウントにログインします。 Google Cloud を初めて使用する場合は、 アカウントを作成して、 実際のシナリオでプロダクトがどのように機能するかを評価してください。 Google Cloud新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Run, Cloud Scheduler, Cloud Workstations APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず フェデレーション ID を使用して
gcloudCLI にログインする必要があります。 -
initialize CLI を初期化するには、次のコマンドを実行します。
gcloudgcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Run, Cloud Scheduler, Cloud Workstations APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず フェデレーション ID を使用して
gcloudCLI にログインする必要があります。 -
initialize CLI を初期化するには、次のコマンドを実行します。
gcloudgcloud init
環境を準備する
後ほど作成する自動スクリプトで使用する、次の環境変数を設定します。
使用する予定の
PROJECT_ID変数とREGION変数を設定します。PROJECT_ID=$PROJECT_ID REGION=$REGION$REGION は、使用するリージョン名(
us-central1など)に置き換えます。使用可能なリージョンの詳細については、Cloud Workstations のロケーションをご覧ください。
アプリケーション アーキテクチャ
このソリューションには、次の Google Cloud コンポーネントが含まれています。
- Cloud Run が
WorkstationConfigの クイック スタート プールのサイズ を更新します。 - 設定したスケジュールで呼び出しを行い、
WorkstationConfigを更新する Cloud Scheduler ジョブ。

Cloud Run サービスを作成する。
最初のステップでは、ポート 8080 で受信した HTTP リクエストをリッスンするシンプルなウェブサーバーをセットアップします。アプリケーションはコンテナ化されているため、任意の言語でサーバーを記述できます。
Python でウェブサーバーのリスナー アプリケーションを作成するには、次のようにします。
workstation-config-updaterという名前の新しいディレクトリを作成し、そのディレクトリに移動します。mkdir workstation-config-updater cd workstation-config-updaterapp.pyという名前のファイルを作成し、次のコードを貼り付けます。import os, subprocess from flask import Flask, request, abort app = Flask(__name__) @app.route("/", methods=["POST"]) def update(): app.logger.info("Update request received.") data = request.json cluster = data["cluster"] region = data["region"] pool_size = data["pool-size"] path = os.path.join(app.root_path, "update_config.sh") o = subprocess.run( [path, cluster, region, pool_size], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True ) app.logger.info("Sending response:", o.stdout) return o.stdout if __name__ == "__main__": app.run(host="0.0.0.0", port=8080, debug=True)このコードは、
PORT環境変数で定義されたポートをリッスンし、スクリプトupdate_config.shを実行する基本的なウェブサーバーを作成します。update_config.shという名前のファイルを作成し、次のコードを貼り付けます。#!/bin/bash set -e if [ $# -ne 3 ] then echo "Usage: update_config.sh CLUSTER REGION POOL_SIZE" exit 1 fi CLUSTER=$1 REGION=$2 POOL_SIZE=$3 # list workstation configs echo "Attempting to list workstation configs in cluster $CLUSTER and region $REGION ..." for CONFIG in $(gcloud workstations configs list --cluster $CLUSTER --region $REGION --format="value(NAME)"); do echo "Attempting to update Quick Pool Size to $POOL_SIZE for config $CONFIG ..." # update the workstation config pool-size RET=$(gcloud workstations configs update $CONFIG --cluster $CLUSTER --region $REGION --pool-size=$POOL_SIZE) if [[ $RET -eq 0 ]]; then echo "Workstation config $CONFIG updated." else echo "Workstation config $CONFIG update failed." fi doneこのスクリプトは、
gcloudコマンドを使用して特定のクラスタ内のすべてのWorkstationConfigを一覧表示し、そのクイック スタート プールのサイズをPOOL_SIZEに更新します。Dockerfileという名前のファイルを作成し、次のコードを貼り付けます。FROM google/cloud-sdk RUN apt-get update && apt-get install -y python3-pip python3 # Copy local code to the container image. ENV APP_HOME /app WORKDIR $APP_HOME COPY . ./ RUN /bin/bash -c 'ls -la; chmod +x ./update_config.sh' # Install production dependencies. RUN pip3 install Flask gunicorn # Run the web service on container startup CMD exec gunicorn --bind :8080 --workers 1 --threads 8 app:appこのコードは、Cloud Run にデプロイできるようにアプリケーションをコンテナ化します。
Cloud Run へのデプロイ
Cloud Run にデプロイするには、次のコマンドを実行します。
gcloud run deploy --source . --project $PROJECT_ID --region $REGIONサービス名の入力を求められたら、Enter キーを押して、デフォルトの名前(
workstation-config-updater)を受け入れます。Artifact Registry API を有効にするか、Artifact Registry リポジトリの作成を許可するように求められたら、y キーを押します。
未認証の呼び出しの許可を求められたら、n キーを押します。
デプロイが完了するまで待ちます。
サービス URL が次の形式で表示されたら、コピーします。
SERVICE_URL=$SERVICE_URL
サービス アカウントを構成して Cloud Run を呼び出す
デプロイした workstation-config-updater サービスでは、未認証の呼び出しは許可されません。
Cloud Scheduler には、workstation-config-updater サービスを呼び出すための適切な認証情報を持つサービス アカウントが必要です。
サービス アカウントを設定する
Cloud Scheduler ジョブに使用するサービス アカウントがまだない場合は、新しいサービス アカウントを作成します。
gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \ --description="$DESCRIPTION" \ --display-name="$DISPLAY_NAME"サービス アカウントが Cloud Run を呼び出せるように、必要な IAM ロール バインディングを追加します。
gcloud run services add-iam-policy-binding workstation-config-updater \ --member=serviceAccount:$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --region $REGION \ --role=roles/run.invoker
認証を使用する Cloud Scheduler の構成を作成する
ジョブを作成し、Cloud Run へのデプロイでコピーした
URLを指定します。gcloud scheduler jobs create http workstation-pool-increaser-cron \ --http-method=POST \ --location=us-central1 \ --schedule="0 9 * * 1-5" \ --time-zone="America/Los_Angeles" \ --headers "Content-Type=application/json" \ --message-body='{"cluster":"$CLUSTER", "region":"$REGION", "pool-size": "2"}' \ --uri=$SERVICE_URL \ --oidc-service-account-email=$SERVICE_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.comこのコマンドは、
WorkstationCluster$CLUSTER 内のすべてのWorkstationConfigsのクイック スタート プールのサイズを、月曜日から金曜日の午前 9 時(PST)に 2 に増加させるようにジョブをスケジュールします。詳細については、ジョブ スケジュールの構成をご覧ください。
同様に、営業日の終わりにワークステーション構成のプールサイズを 0 に減らすには、次のコマンドを実行します。
gcloud scheduler jobs create http workstation-pool-decreaser-cron \ --http-method=POST \ --location=$REGION \ --schedule="0 17 * * 1-5" \ --time-zone="America/Los_Angeles" \ --headers "Content-Type=application/json" \ --message-body='{"cluster":"$CLUSTER", "region":"$REGION", "pool-size": "0"}' \ --uri=$SERVICE_URL \ --oidc-service-account-email=$SERVICE-ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
省略可: ジョブを確認する
ジョブが想定どおりに動作していることを確認するには、ジョブを確認します。
コンソールで、[Cloud Scheduler] ページに移動します。 Google Cloud
ジョブのリストに
workstation-pool-increaser-cronが表示されます。workstation-pool-increaser-cronジョブの行で、[ アクション] > [ジョブ実行を強制] をクリックします。プロジェクトで最初に作成されたジョブの実行には数分かかることがあります。
[最後の実行のステータス] 列の
Successステータスに、あなたのジョブが正常に実行されたことが表示されます。
ワークステーション構成が更新されたことを確認する手順は次のとおりです。
コンソールで、[ワークステーションの構成] ページに移動します。 Google Cloud
クイック スタート プールのサイズ が 2 であることを確認します。
Cloud Run サービスの ログ を表示します。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
テスト プロジェクトを削除する
アカウントで追加料金が発生しないようにするには、このクイックスタートでデプロイしたすべてのリソース を削除します。 Google Cloud
リポジトリを削除する
デプロイされたサービスが使用されていない場合、Cloud Run の料金は発生しません。ただし、コンテナ イメージを Artifact Registry に保存した場合にも料金が発生する可能性があります。Artifact Registry リポジトリを削除するには、Artifact Registry ドキュメントのリポジトリを削除するの手順を行います。
サービスを削除する
Cloud Run サービスの費用は、リクエストを受け取るまでは発生しません。Cloud Run サービスを削除するには、次のいずれかの操作を行います。
コンソール
サービスを削除するには:
Google Cloud コンソールで、Cloud Run の [サービス] ページに移動します。
削除するサービスをサービスリストで探し、そのチェックボックスをクリックして選択します。
[削除] をクリックします。これにより、サービスのすべてのリビジョンが削除されます。これにより、サービスのすべてのリビジョンが削除されます。
gcloud
サービスを削除するには、次のコマンドを実行します。
gcloud run services delete SERVICE --region REGION
次のように置き換えます。
- SERVICE: サービスの名前。
- REGION: サービスの Google Cloud リージョン。
テスト プロジェクトを削除する
Google Cloud プロジェクトを削除すると、そのプロジェクト内のすべてのリソースに対する課金が停止します。プロジェクト内のすべての Google Cloud リソースを解放する手順は次のとおりです。
- コンソールで [**リソースの管理**] ページに移動します。 Google Cloud
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、 [Shut down] をクリックしてプロジェクトを削除します。
Cloud Scheduler ジョブを削除する
個々の Cloud Scheduler リソースを削除するには:
コンソールで、[Cloud Scheduler] ページに移動します。 Google Cloud
ジョブの横にあるチェックボックスをクリックします。
ページの上部にある [削除] ボタンをクリックして、削除操作を確定します。
次のステップ
- Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud アーキテクチャ センターをご覧ください。