- Planen Sie automatische Erhöhungen und Verringerungen der Größe des Schnellstartpools.
- Workstations werden automatisch nach einem regelmäßigen Zeitplan gestartet.
In dieser Anleitung erfahren Sie, wie Sie die Poolgröße für den Schnellstart an die typischen Geschäftszeiten anpassen.
Umgebung vorbereiten
Legen Sie die folgenden Umgebungsvariablen fest, die von den automatisierten Skripts verwendet werden, die Sie später erstellen.
Legen Sie die Variablen
PROJECT_IDundREGIONfest, die Sie verwenden möchten:PROJECT_ID=$PROJECT_ID REGION=$REGIONErsetzen Sie $REGION durch den Namen der Region, die Sie verwenden möchten, z. B.
us-central1.Weitere Informationen zu verfügbaren Regionen finden Sie unter Cloud Workstations-Standorte.
Anwendungsarchitektur
Diese Lösung umfasst die folgenden Google Cloud Komponenten:
- Cloud Run, um die Größe des Schnellstartpools der
WorkstationConfigzu aktualisieren. - Cloud Scheduler-Jobs,
die nach einem festgelegten Zeitplan Aufrufe senden, um die
WorkstationConfigzu aktualisieren.

Cloud Run-Dienst erstellen
Im ersten Schritt richten Sie einen einfachen Webserver ein, der auf die HTTP-Anfragen an Port 8080 wartet. Da die Anwendung containerisiert ist, können Sie Ihren Server in einer beliebigen Sprache schreiben.
So schreiben Sie die Webserver-Listeneranwendung in Python:
Erstellen Sie ein neues Verzeichnis mit dem Namen
workstation-config-updaterund ersetzen Sie das aktuelle Verzeichnis durch dieses Verzeichnis:mkdir workstation-config-updater cd workstation-config-updaterErstellen Sie eine Datei mit dem Namen
app.pyund fügen Sie den folgenden Code in diese ein: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)Mit diesem Code wird ein einfacher Webserver erstellt, der den von der Umgebungsvariable
PORTdefinierten Port überwacht und das Skriptupdate_config.shausführt.Erstellen Sie eine Datei mit dem Namen
update_config.shund fügen Sie den folgenden Code in diese ein:#!/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 doneIn diesem Skript werden
gcloud-Befehle verwendet, um alleWorkstationConfigin einem bestimmten Cluster aufzulisten und die Poolgröße für den Schnellstart aufPOOL_SIZEzu aktualisieren.Erstellen Sie eine Datei mit dem Namen
Dockerfileund fügen Sie den folgenden Code in diese ein: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:appDieser Code containerisiert die Anwendung, damit sie in Cloud Run bereitgestellt werden kann.
In Cloud Run bereitstellen
Führen Sie den folgenden Befehl aus, um die Bereitstellung in Cloud Run vorzunehmen:
gcloud run deploy --source . --project $PROJECT_ID --region $REGIONWenn Sie zur Eingabe des Dienstnamens aufgefordert werden, drücken Sie die Eingabetaste, um den Standardnamen
workstation-config-updaterzu akzeptieren.Wenn Sie aufgefordert werden, die Artifact Registry API zu aktivieren oder das Erstellen des Artifact Registry-Repositorys zu erlauben, drücken Sie y.
Wenn Sie aufgefordert werden, nicht authentifizierte Aufrufe zuzulassen, drücken Sie n.
Warten Sie, bis die Bereitstellung abgeschlossen ist.
Kopieren Sie die Dienst-URL, wenn sie im folgenden Format angezeigt wird:
SERVICE_URL=$SERVICE_URL
Dienstkonto zum Aufrufen von Cloud Run konfigurieren
Der von Ihnen bereitgestellte Dienst „workstation-config-updater“ lässt keine nicht authentifizierten Aufrufe zu.
Für Cloud Scheduler ist ein Dienstkonto mit den entsprechenden Anmeldedaten zum Aufrufen des Dienstes „workstation-config-updater“ erforderlich.
Dienstkonto einrichten
Wenn Sie noch kein Dienstkonto haben, das Sie für Cloud Scheduler-Jobs verwenden möchten, erstellen Sie ein neues Dienstkonto.
gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \ --description="$DESCRIPTION" \ --display-name="$DISPLAY_NAME"Fügen Sie die erforderliche IAM-Rollenbindung hinzu, damit Ihr Dienstkonto Cloud Run aufrufen kann.
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-Konfiguration mit Authentifizierung erstellen
Erstellen Sie einen Job und geben Sie die
URLan, die Sie aus In Cloud Run bereitstellen kopiert haben: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.comMit diesem Befehl wird ein Job geplant, um die Quickstart-Poolgröße für alle
WorkstationConfigsinWorkstationCluster$CLUSTER von Montag bis Freitag um 9:00 Uhr (PST) auf 2 zu erhöhen.Weitere Informationen finden Sie unter Jobzeitpläne konfigurieren.
Wenn Sie die Poolgröße für Ihre Workstation-Konfiguration am Ende eines Arbeitstags auf 0 reduzieren möchten, führen Sie Folgendes aus:
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
Optional: Jobs überprüfen
Sie können die Jobs überprüfen, um sicherzugehen, dass sie wie erwartet funktionieren.
Rufen Sie in der Google Cloud Console die Seite Cloud Scheduler auf.
workstation-pool-increaser-cronsollte in der Liste der Jobs angezeigt werden.Klicken Sie in der Zeile für den
workstation-pool-increaser-cron-Job auf Aktionen > Jobausführung erzwingen.Die Ausführung des ersten in einem Projekt erstellten Jobs kann einige Minuten dauern.
In der Spalte Status der letzten Ausführung zeigt der Status
Successan, dass Ihr Job erfolgreich ausgeführt wurde.
So prüfen Sie, ob die Workstation-Konfigurationen aktualisiert wurden:
Rufen Sie in der Google Cloud -Console die Seite Workstationkonfigurationen auf.
Prüfen Sie, ob die Größe des Schnellstartpools 2 ist.
Logs für Ihren Cloud Run-Dienst ansehen