- Planen Sie die automatische Erhöhung oder Verringerung der Schnelleinstiegspoolgröße.
- Workstations nach einem regelmäßigen Zeitplan automatisch starten.
In dieser Anleitung erfahren Sie, wie Sie die Größe des Schnellstartpools entsprechend den üblichen Geschäftszeiten erhöhen oder verringern.
Lernziele
- Schreiben Sie einen Cloud Run-Dienst, der die Schnelleinstiegspoolgröße für eine Workstationkonfiguration aktualisiert, und stellen Sie diesen bereit.
- Konfigurieren Sie einen Cloud Scheduler-Job, mit dem der in Schritt 1 erstellte Dienst von Montag bis Freitag von 9:00 bis 17:00 Uhr ausgeführt wird, damit er den PST-Geschäftszeiten entspricht.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
- Cloud Scheduler
- Cloud Run
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweise
- Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Cloud Run, Cloud Scheduler, Cloud Workstations APIs aktivieren.
- Installieren Sie die Google Cloud CLI.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Cloud Run, Cloud Scheduler, Cloud Workstations APIs aktivieren.
- Installieren Sie die Google Cloud CLI.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
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_ID
undREGION
fest, die Sie verwenden möchten:PROJECT_ID=$PROJECT_ID REGION=$REGION
Ersetzen 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 von
WorkstationConfig
zu aktualisieren. - Cloud Scheduler-Jobs, die Aufrufe nach einem festgelegten Zeitplan ausführen, um die
WorkstationConfig
zu aktualisieren.
Cloud Run-Dienst erstellen
In diesem ersten Schritt richten Sie einen einfachen Webserver ein, der die an Port 8080 empfangenen HTTP-Anfragen abhört. Da die Anwendung containerisiert ist, können Sie Ihren Server in einer beliebigen Sprache schreiben.
So schreiben Sie die Webserver-Listener-Anwendung in Python:
Erstellen Sie ein neues Verzeichnis mit dem Namen
workstation-config-updater
und ersetzen Sie das aktuelle Verzeichnis durch dieses Verzeichnis:mkdir workstation-config-updater cd workstation-config-updater
Erstellen Sie eine Datei mit dem Namen
app.py
und 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
PORT
definierten Port überwacht und das Skriptupdate_config.sh
ausführt.Erstellen Sie eine Datei mit dem Namen
update_config.sh
und 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 done
Dieses Skript verwendet
gcloud
-Befehle, um alleWorkstationConfig
in einem bestimmten Cluster aufzulisten und die Größe des Schnellstartpools aufPOOL_SIZE
zu aktualisieren.Erstellen Sie eine Datei mit dem Namen
Dockerfile
und 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:app
Dieser Code containerisiert die Anwendung, um sie für die Bereitstellung in Cloud Run bereit zu machen.
In Cloud Run bereitstellen
Führen Sie den folgenden Befehl aus, um die Bereitstellung in Cloud Run durchzuführen:
gcloud run deploy --source . --project $PROJECT_ID --region $REGION
Wenn Sie aufgefordert werden, den Dienstnamen anzugeben, drücken Sie die Eingabetaste, um den Standardnamen
workstation-config-updater
zu übernehmen.Wenn Sie aufgefordert werden, die Artifact Registry API zu aktivieren oder das Erstellen eines Artifact Registry-Repositorys zuzulassen, drücken Sie y.
Wenn Sie aufgefordert werden, nicht authentifizierte Aufrufe zuzulassen, drücken Sie n.
Warten Sie, bis die Bereitstellung abgeschlossen ist.
Wenn die Dienst-URL im folgenden Format angezeigt wird, kopieren Sie sie:
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 erforderlich, um den Dienst „workstation-config-updater“ aufzurufen.
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 den
URL
an, den 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.com
Mit diesem Befehl wird ein Job geplant, bei dem die Schnelleinstiegspoolgröße für alle
WorkstationConfigs
inWorkstationCluster
$CLUSTER von Montag bis Freitag um 9:00 Uhr PST (UTC -8) erhöht wird.Weitere Informationen finden Sie unter Jobzeitpläne konfigurieren.
Um die Poolgröße für Ihre Workstationkonfiguration am Ende eines Arbeitstages auf 0 zu reduzieren, führen Sie folgenden Befehl 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 überprüfen, ob Ihre Jobs wie erwartet funktionieren.
Rufen Sie in der Google Cloud Console die Seite Cloud Scheduler auf.
workstation-pool-increaser-cron
sollte in der Liste der Jobs angezeigt werden.Klicken Sie in der Zeile für den Job
workstation-pool-increaser-cron
auf Aktionen > Jobausführung erzwingen.Die Ausführung des ersten Jobs, der in einem Projekt erstellt wird, kann einige Minuten dauern.
In der Spalte Status der letzten Ausführung zeigt der Status
Success
an, dass der Job erfolgreich ausgeführt wurde.
So prüfen Sie, ob die Workstationkonfigurationen 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.
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Testprojekt entfernen
Während für Cloud Run keine Kosten anfallen, wenn der Dienst nicht verwendet wird, wird Ihnen dennoch das Speichern des Container-Images in Artifact Registry möglicherweise in Rechnung gestellt. Sie können das Container-Image löschen oder Ihr Google Cloud-Projekt löschen, um Kosten zu vermeiden. Wenn Sie Ihr Google Cloud-Projekt löschen, wird die Abrechnung für alle in diesem Projekt verwendeten Ressourcen beendet.
- Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
Cloud Scheduler-Jobs löschen
So löschen Sie einzelne Cloud Scheduler-Ressourcen:
Rufen Sie in der Google Cloud Console die Seite Cloud Scheduler auf.
Klicken Sie die Kästchen neben Ihren Jobs an.
Klicken Sie oben auf der Seite auf Löschen und bestätigen Sie den Löschvorgang.
Nächste Schritte
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center