Workstation-Vorgänge mit Cloud Scheduler und Cloud Run planen

In dieser Anleitung wird gezeigt, wie Sie mit Cloud Scheduler und Cloud Run Vorgänge wie die folgenden automatisch ausführen können:

  • Automatische Erhöhung und Verringerung der Größe des Schnellstartpools planen.
  • Workstations regelmäßig automatisch starten.

In dieser Anleitung erfahren Sie, wie Sie die Größe des Schnellstartpools an die typischen Öffnungszeiten anpassen können.

Ziele

  1. Einen Cloud Run-Dienst schreiben und bereitstellen, der die Größe des Schnellstartpools für eine Workstationkonfiguration aktualisiert.
  2. Einen Cloud Scheduler-Job konfigurieren, der den in Schritt 1 erstellten Dienst so plant, dass er von Montag bis Freitag zwischen 9:00 und 17:00 Uhr ausgeführt wird, um den Öffnungszeiten in der Zeitzone Pacific Standard Time (PST) zu entsprechen.

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. Verwenden Sie den Preisrechner.

Neuen Google Cloud Nutzern vonsteht 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 in Ihrem Google Cloud Konto an. Wenn Sie noch kein Konto haben Google Cloud, erstellen Sie einfach 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.

    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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Run, Cloud Scheduler, Cloud Workstations APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud Run, Cloud Scheduler, Cloud Workstations APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    gcloud init

Umgebung vorbereiten

Legen Sie die folgenden Umgebungsvariablen fest, die von den automatisierten Skripts verwendet werden, 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, z. B. us-central1.

    Weitere Informationen zu den verfügbaren Regionen finden Sie unter Cloud Workstations-Standorte.

Anwendungsarchitektur

Diese Lösung umfasst die folgenden Google Cloud Komponenten:

  • Cloud Run zum Aktualisieren der Größe des Schnellstartpools der WorkstationConfig.
  • Cloud Scheduler-Jobs um Aufrufe nach einem festgelegten Zeitplan auszuführen und die WorkstationConfig zu aktualisieren.

Architekturdiagramm des Systems, in dem die Planung von Workstation-Vorgängen mit Cloud Scheduler und Cloud Run dargestellt wird

Cloud Run-Dienst erstellen

Im ersten Schritt richten Sie einen einfachen Webserver ein, der auf HTTP-Anfragen auf Port 8080 wartet. Da die Anwendung containerisiert ist, können Sie den 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 von der PORT Umgebungsvariable definierten Port überwacht 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 Größe des Schnellstartpools 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
    

    Dieser 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 Anwendung in Cloud Run bereitzustellen:

gcloud run deploy --source . --project $PROJECT_ID --region $REGION
  1. Wenn Sie zur Eingabe des Dienstnamens aufgefordert werden, drücken Sie die Eingabetaste, um den Standardnamen workstation-config-updater zu akzeptieren.

  2. Wenn Sie aufgefordert werden, die Artifact Registry API zu aktivieren oder das Erstellen des Artifact Registry-Repositorys zu erlauben, 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. 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 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 unter 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, der die Größe des Schnellstartpools für alle WorkstationConfigs in WorkstationCluster $CLUSTER um 9:00 Uhr PST von Montag bis Freitag auf 2 erhöht.

    Weitere Informationen finden Sie unter Jobzeitpläne konfigurieren.

  2. Wenn Sie die Poolgröße für Ihre Workstationkonfiguration am Ende eines Arbeitstags auf 0 reduzieren möchten, führen Sie den 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 prüfen

Sie können die Jobs prüfen, um sicherzustellen, dass sie wie erwartet funktionieren.

  1. Wechseln Sie in der Google Cloud Console zur Seite Cloud Scheduler.

    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 Jobs, der in einem Projekt erstellt wurde, kann einige Minuten dauern.

  3. In der Spalte Status der letzten Ausführung zeigt der Status Success an, dass Ihr Job erfolgreich ausgeführt wurde.

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

  1. Wechseln Sie in der Google Cloud Console zur Seite Workstationkonfigurationen.

    Zu Workstationkonfigurationen

  2. Prüfen Sie, ob die Größe des Schnellstartpools 2 ist.

  3. Rufen Sie Logs für Ihren Cloud Run-Dienst auf.

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

Löschen Sie alle Ressourcen , die Sie mit dieser Kurzanleitung bereitgestellt haben, um zusätzliche Kosten für Ihr Google Cloud Konto zu vermeiden.

Repository löschen

Für Cloud Run fallen keine Kosten an, wenn der bereitgestellte Dienst nicht verwendet wird. Das Speichern des Container-Images in Artifact Registry ist jedoch kostenpflichtig. Wenn Sie Artifact Registry-Repositories löschen möchten, folgen Sie der Anleitung unter Repositories löschen in der Artifact Registry Dokumentation.

Dienst löschen

Für Cloud Run-Dienste fallen erst Kosten an, wenn sie Anfragen erhalten. So löschen Sie Ihren Cloud Run-Dienst:

Console

So löschen Sie einen Dienst:

  1. Wechseln Sie in der Google Cloud Console zur Seite Dienste von Cloud Run:

    Zu Cloud Run

  2. Klicken Sie in der Übersicht das Kästchen des zu löschenden Dienstes an.

  3. Klicken Sie auf Löschen. Dadurch werden alle Überarbeitungen des Dienstes gelöscht.

gcloud

Führen Sie folgenden Befehl aus, um einen Dienst zu löschen:

gcloud run services delete SERVICE --region REGION

Ersetzen Sie Folgendes:

  • SERVICE: Name Ihres Dienstes
  • REGION: Google Cloud Region des Dienstes

Testprojekt löschen

Wenn Sie Ihr Google Cloud Projekt löschen, wird die Abrechnung für alle Ressourcen in diesem Projekt beendet. So geben Sie alle Google Cloud Ressourcen in Ihrem Projekt frei:

  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 auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Beenden , um das Projekt zu löschen.

Cloud Scheduler-Jobs löschen

So löschen Sie einzelne Cloud Scheduler-Ressourcen:

  1. Wechseln Sie in der Google Cloud Console zur Seite Cloud Scheduler.

    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