Workstationvorgänge mit Cloud Scheduler und Cloud Run planen


In dieser Anleitung erfahren Sie, wie Sie mit Cloud Scheduler und Cloud Run Vorgänge wie

  • Die Größe des Schnellstartpools wird automatisch erhöht oder verringert.
  • Workstations nach einem regelmäßigen Zeitplan automatisch starten.

In dieser Anleitung erfahren Sie, wie Sie die Größe des Schnellstartpools auf die mit den üblichen Öffnungszeiten übereinstimmen.

Lernziele

  1. Cloud Run-Dienst schreiben und bereitstellen, der die Größe des Schnellstartpools für eine Workstationkonfiguration aktualisiert
  2. Konfigurieren Sie einen Cloud Scheduler-Job, mit dem der in Schritt 1 erstellte Dienst montags bis freitags von 9:00 bis 17:00 Uhr gemäß den PST-Geschäftszeiten ausgeführt wird.

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. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

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.

Hinweis

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. Cloud Run, Cloud Scheduler, Cloud Workstations APIs aktivieren.

    Aktivieren Sie die APIs

  5. Installieren Sie die Google Cloud CLI.
  6. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  9. Cloud Run, Cloud Scheduler, Cloud Workstations APIs aktivieren.

    Aktivieren Sie die APIs

  10. Installieren Sie die Google Cloud CLI.
  11. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init

Umgebung vorbereiten

Legen Sie die folgenden Umgebungsvariablen fest, die vom die Sie später erstellen.

  1. Legen Sie die Variablen PROJECT_ID und REGION 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. verwenden, 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 , um nach einem festgelegten Zeitplan Anrufe zu tätigen und die WorkstationConfig zu aktualisieren.

Diagramm der Systemarchitektur, das das Planen von Workstationvorgängen mit Cloud Scheduler und Cloud Run zeigt

Cloud Run-Dienst erstellen

Dieser erste Schritt besteht darin, einen einfachen Webserver einzurichten, der die auf Port 8080 empfangenen HTTP-Anfragen überwacht. Da die Anwendung containerisiert ist, können Sie Ihren Server in einer beliebigen Sprache schreiben.

So schreiben Sie die Webserver-Listener-Anwendung in Python:

  1. 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
    
  2. 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 vom Umgebungsvariable PORT und das Skript update_config.sh ausführt.

  3. 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 alle WorkstationConfig in einem bestimmten Cluster aufzulisten und die Schnellstart-Poolgröße auf POOL_SIZE zu aktualisieren.

  4. 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
    

    Mit diesem Code wird die Anwendung containerisiert, damit sie in Cloud Run bereitgestellt werden kann.

In Cloud Run bereitstellen

Führen Sie zum Bereitstellen in Cloud Run den folgenden Befehl aus:

gcloud run deploy --source . --project $PROJECT_ID --region $REGION
  1. Wenn Sie aufgefordert werden, den Namen des Dienstes einzugeben, drücken Sie die Eingabetaste, um den Standardname workstation-config-updater.

  2. Wenn Sie aufgefordert werden, die Artifact Registry API zu aktivieren oder das Erstellen eines Artifact Registry-Repositorys zuzulassen, drücken Sie Y.

  3. Wenn Sie aufgefordert werden, nicht authentifizierte Aufrufe zuzulassen, drücken Sie n.

  4. Warten Sie, bis die Bereitstellung abgeschlossen ist.

  5. Wenn die Dienst-URL im folgenden Format angezeigt wird, kopieren Sie sie:

SERVICE_URL=$SERVICE_URL

Dienstkonto zum Aufrufen von Cloud Run konfigurieren

Der bereitgestellte Dienst „workstation-config-updater“ lässt keine nicht authentifizierte Aufrufe.

Für Cloud Scheduler ist ein Dienstkonto mit den entsprechenden Anmeldedaten erforderlich, um den Dienst „workstation-config-updater“ aufzurufen.

Dienstkonto einrichten

  1. 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"
    
  2. 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

  1. Erstellen Sie einen Job und geben Sie die URL an, 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.com
    

    Mit diesem Befehl wird ein Job geplant, um die Größe des Schnellstartpools für alle WorkstationConfigs in WorkstationCluster $CLUSTER bis 2 um 9:00 Uhr PST von Montag bis Freitag.

    Weitere Informationen finden Sie unter Jobzeitpläne konfigurieren.

  2. Führen Sie entsprechend folgenden Befehl aus, um die Poolgröße für Ihre Workstationkonfiguration am Ende eines Arbeitstags auf 0 zu reduzieren:

    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

Um sicherzustellen, dass Ihre Jobs wie erwartet funktionieren, können Sie sie überprüfen.

  1. Rufen Sie in der Google Cloud Console die Seite Cloud Scheduler auf.

    Zu Cloud Scheduler

    workstation-pool-increaser-cron sollte in der Liste der Jobs angezeigt werden.

  2. Klicken Sie in der Zeile für den Job workstation-pool-increaser-cron auf . Aktionen > Jobausführung erzwingen:

    Die Ausführung des ersten in einem Projekt erstellten Jobs kann einige Minuten dauern.

  3. In der Spalte Status der letzten Ausführung weist der Status Success darauf hin, dass um Ihren Job erfolgreich auszuführen.

So prüfen Sie, ob die Workstationkonfigurationen aktualisiert wurden:

  1. Rufen Sie in der Google Cloud Console die Seite Workstationkonfigurationen auf.

    Zur Workstationkonfigurationen

  2. Prüfen Sie, ob für die Größe des Schnellstartpools „2“ festgelegt ist.

  3. 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.

  1. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. 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:

  1. Rufen Sie in der Google Cloud Console die Seite Cloud Scheduler auf.

    Zu Cloud Scheduler

  2. Klicken Sie die Kästchen neben Ihren Jobs an.

  3. 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