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


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

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

Lernziele

  1. Schreiben und Bereitstellen eines Cloud Run-Dienstes, der die Quick Start-Poolgröße für eine Arbeitsstationskonfiguration aktualisiert.
  2. Konfigurieren Sie einen Cloud Scheduler-Job, der den in Schritt 1 erstellten Dienst so plant, dass er montags bis freitags von 09:00 bis 17:00 Uhr ausgeführt wird und den Geschäftszeiten in PST 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.

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.

Hinweise

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    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.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. Wenn Sie einen externen Identitätsanbieter (Identity Provider, IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  7. Führen Sie den folgenden Befehl aus, um die gcloud-Befehlszeile zu initialisieren:

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

    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.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. Wenn Sie einen externen Identitätsanbieter (Identity Provider, IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  13. Führen Sie den folgenden Befehl aus, um die gcloud-Befehlszeile zu initialisieren:

    gcloud init
  14. 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 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 WorkstationConfig zu aktualisieren.
    • Cloud Scheduler-Jobs, die nach einem festgelegten Zeitplan Aufrufe senden, um die WorkstationConfig zu aktualisieren.

    Diagramm der Systemarchitektur, das zeigt, wie Workstation-Vorgänge mit Cloud Scheduler und Cloud Run geplant werden

    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:

    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 Umgebungsvariable PORT 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
      
      

      In diesem Skript werden gcloud-Befehle verwendet, um alle WorkstationConfig in einem bestimmten Cluster aufzulisten und die Poolgröße für den Schnellstart 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 Bereitstellung in Cloud Run vorzunehmen:

    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 zum Aufrufen des Dienstes „workstation-config-updater“ erforderlich.

    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 Quickstart-Poolgröße für alle WorkstationConfigs in WorkstationCluster $CLUSTER von Montag bis Freitag um 9:00 Uhr (PST) auf 2 zu erhöhen.

      Weitere Informationen finden Sie unter Jobzeitpläne konfigurieren.

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

    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 workstation-pool-increaser-cron-Job 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 zeigt der Status Success an, dass Ihr Job erfolgreich ausgeführt wurde.

    So prüfen Sie, ob die Workstation-Konfigurationen aktualisiert wurden:

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

      Zu Workstationkonfigurationen

    2. Prüfen Sie, ob die Größe des Schnellstartpools 2 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. Durch das Löschen des Google Cloud -Projekts wird die Abrechnung für alle in diesem Projekt verwendeten Ressourcen beendet.

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    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