- 排定自動增加和減少「快速啟動集區大小」。
- 依固定時間表自動啟動工作站。
本教學課程將說明如何配合一般營業時間,增加及減少快速啟動集區大小。
目標
- 撰寫及部署 Cloud Run 服務,更新工作站設定的「快速啟動集區大小」。
- 設定 Cloud Scheduler 工作,將步驟 1 中建立的服務排程設定為在週一到週五的 09:00 到 17:00 執行,以配合太平洋標準時間的營業時間。
費用
在本文件中,您會使用下列 Google Cloud的計費元件:
- Cloud Scheduler
- Cloud Run
如要根據預測用量估算費用,請使用 Pricing Calculator。
完成本文所述工作後,您可以刪除建立的資源,避免繼續計費,詳情請參閱「清除所用資源」。
事前準備
- 登入 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。
-
若您採用的是外部識別資訊提供者 (IdP),請先 使用聯合身分登入
gcloudCLI。 -
執行下列指令,初始化
gcloudCLI:gcloud 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。
-
若您採用的是外部識別資訊提供者 (IdP),請先 使用聯合身分登入
gcloudCLI。 -
執行下列指令,初始化
gcloudCLI:gcloud init
準備環境
設定下列環境變數,這些變數會用於稍後建立的自動化指令碼。
設定您打算使用的
PROJECT_ID和REGION變數:PROJECT_ID=$PROJECT_ID REGION=$REGION將 $REGION 替換成您打算使用的區域名稱,例如
us-central1。如要進一步瞭解可用區域,請參閱「Cloud Workstations 服務據點」。
應用程式架構
本解決方案包含下列 Google Cloud 元件:
- Cloud Run,更新
WorkstationConfig的「快速啟動集區大小」。 - Cloud Scheduler 工作:依照設定的排程進行呼叫,以更新
WorkstationConfig。

建立 Cloud Run 服務
第一步是設定簡易網路伺服器,監聽通訊埠 8080 收到的 HTTP 要求。由於應用程式已容器化,您可以使用任何語言編寫伺服器。
如要以 Python 編寫網路伺服器接聽應用程式,請按照下列步驟操作:
建立一個新目錄並命名為
workstation-config-updater,然後將目錄變更為該目錄:mkdir workstation-config-updater cd workstation-config-updater建立名為
app.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。
等待部署作業完成。
服務網址會顯示為以下格式,請複製該網址:
SERVICE_URL=$SERVICE_URL
設定服務帳戶來叫用 Cloud Run
您部署的工作站設定更新程式服務不允許未經驗證的叫用。
Cloud Scheduler 需要具備適當憑證的服務帳戶,才能呼叫工作站設定更新程式服務。
設定服務帳戶
如果您還沒有要用於 Cloud Scheduler 工作的服務帳戶,請建立新的服務帳戶。
gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \ --description="$DESCRIPTION" \ --display-name="$DISPLAY_NAME"新增必要的 IAM 角色繫結,允許服務帳戶叫用 Cloud Run。
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 設定
建立工作,並指定從「Deploy to Cloud Run」(部署至 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 點,增加至 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
選用:驗證工作
如要確保工作正常運作,可以驗證工作。
前往 Google Cloud 控制台的「Cloud Scheduler」頁面。
workstation-pool-increaser-cron應該會顯示在工作清單中。在
workstation-pool-increaser-cron工作的資料列中,依序按一下「 Actions」(動作) >「Force a job run」(強制執行工作)。在專案中建立的第一項工作可能需要幾分鐘的時間才能執行。
如果在「Status of last execution」(上次執行狀態) 欄中看到
Success狀態,表示工作執行成功。
如要確認工作站設定已更新,請按照下列步驟操作:
清除所用資源
為避免因為本教學課程所用資源,導致系統向 Google Cloud 帳戶收取費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。
移除測試專案
為避免系統向您的 Google Cloud 帳戶收取額外費用,請刪除您透過本快速入門導覽課程部署的所有資源。
刪除存放區
部署的服務閒置時,Cloud Run 不會向您收費。 不過,您可能仍須支付在 Artifact Registry 中儲存容器映像檔的費用。如要刪除 Artifact Registry 存放區,請按照 Artifact Registry 說明文件中的「刪除存放區」一節操作。
刪除服務
Cloud Run 服務收到要求後才會產生費用。如要刪除 Cloud Run 服務,請按照下列步驟操作:
控制台
如要刪除服務:
前往 Google Cloud 控制台的 Cloud Run「Services」(服務) 頁面:
在服務清單中找出您要刪除的服務,然後按一下核取方塊來選取。
按一下「Delete」(刪除)。如此便會刪除服務的所有修訂版本。
gcloud
如要刪除服務,請執行下列指令:
gcloud run services delete SERVICE --region REGION
更改下列內容:
- SERVICE:服務名稱。
- REGION:服務的 Google Cloud 區域。
刪除測試專案
刪除 Google Cloud 專案後,系統就會停止對該專案中的所有資源收取費用。如要釋出專案中的所有 Google Cloud 資源,請按照下列步驟操作:
- 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。
- 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)。
- 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。
刪除 Cloud Scheduler 工作
如要刪除個別 Cloud Scheduler 資源,請按照下列步驟操作:
前往 Google Cloud 控制台的「Cloud Scheduler」頁面。
按一下工作旁邊的核取方塊。
按一下頁面頂端的 [Delete] (刪除) 按鈕,並確認您要刪除工作。
後續步驟
- 查看 Google Cloud 的參考架構、圖表和最佳做法。歡迎瀏覽我們的 Cloud Architecture Center。