Pianifica le operazioni della workstation utilizzando Cloud Scheduler e Cloud Run


Questo tutorial mostra come utilizzare Cloud Scheduler e Cloud Run per eseguire automaticamente operazioni come

  • Pianificazione degli aumenti e delle riduzioni automatici delle dimensioni del pool di avvio rapido.
  • Avvio automatico delle workstation in base a una pianificazione regolare.

Questo tutorial ti aiuta ad aumentare e diminuire le dimensioni del pool di avvio rapido in modo che corrispondano all'orario di apertura tipico.

Obiettivi

  1. Scrivi ed esegui il deployment di un servizio Cloud Run che aggiorna le dimensioni del pool di avvio rapido per una configurazione della workstation.
  2. Configura un job Cloud Scheduler che pianifichi l'esecuzione del servizio creato nel passaggio 1 dalle 09:00 alle 17:00, dal lunedรฌ al venerdรฌ, in modo che corrisponda all'orario di lavoro del fuso orario PST.

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

  • Cloud Scheduler
  • Cloud Run

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi.

I nuovi utenti di Google Cloud potrebbero avere diritto a una prova senza costi.

Al termine delle attivitร  descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per ulteriori informazioni, vedi Pulizia.

Prima di iniziare

  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. Se utilizzi un provider di identitร  (IdP) esterno, devi prima accedere alla CLI gcloud con la tua identitร  federata.

  7. Per inizializzare la CLI gcloud, esegui questo comando:

    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. Se utilizzi un provider di identitร  (IdP) esterno, devi prima accedere alla CLI gcloud con la tua identitร  federata.

  13. Per inizializzare la CLI gcloud, esegui questo comando:

    gcloud init
  14. Prepara l'ambiente

    Imposta le seguenti variabili di ambiente, che vengono utilizzate dagli script automatizzati che crei in un secondo momento.

    1. Imposta le variabili PROJECT_ID e REGION che prevedi di utilizzare:

      PROJECT_ID=$PROJECT_ID
      REGION=$REGION
      

      Sostituisci $REGION con il nome della regione che prevedi di utilizzare, ad esempio us-central1.

      Per ulteriori informazioni sulle regioni disponibili, vedi Localitร  di Cloud Workstations.

    Architettura dell'applicazione

    Questa soluzione include i seguenti Google Cloud componenti:

    • Cloud Run per aggiornare le dimensioni del pool di avvio rapido di WorkstationConfig.
    • Job Cloud Scheduler per effettuare chiamate in base a una pianificazione prestabilita per aggiornare WorkstationConfig.

    Diagramma dell'architettura del sistema che mostra la pianificazione delle operazioni di Workstations utilizzando Cloud Scheduler e Cloud Run

    Crea un servizio Cloud Run

    Il primo passaggio consiste nel configurare un semplice server web per rimanere in ascolto delle richieste HTTP che ricevi sulla porta 8080. Poichรฉ l'applicazione รจ containerizzata, puoi scrivere il server in qualsiasi linguaggio.

    Per scrivere l'applicazione listener del server web in Python:

    1. Crea una nuova directory denominata workstation-config-updater e accedi alla directory:

      mkdir workstation-config-updater
      cd workstation-config-updater
      
    2. Crea un file denominato app.py e incolla il seguente codice:

      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)
      

      Questo codice crea un server web di base in ascolto sulla porta definita dalla variabile di ambiente PORT ed esegue lo script update_config.sh.

    3. Crea un file denominato update_config.sh e incolla il seguente codice:

      #!/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
      
      

      Questo script utilizza i comandi gcloud per elencare tutti i WorkstationConfig in un determinato cluster e aggiornare le dimensioni del pool di avvio rapido a POOL_SIZE.

    4. Crea un file denominato Dockerfile e incolla il seguente codice:

      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
      

      Questo codice containerizza l'applicazione per prepararla al deployment su Cloud Run.

    Esegui il deployment in Cloud Run

    Per eseguire il deployment su Cloud Run, esegui questo comando:

    gcloud run deploy --source . --project $PROJECT_ID --region $REGION
    1. Quando ti viene chiesto il nome del servizio, premi Invio per accettare il nome predefinito workstation-config-updater.

    2. Se ti viene chiesto di abilitare l'API Artifact Registry o di consentire la creazione del repository Artifact Registry, premi y.

    3. Quando ti viene chiesto di consentire chiamate non autenticate, premi n.

    4. Attendi il completamento del deployment.

    5. Quando l'URL del servizio viene visualizzato nel seguente formato, copialo:

    SERVICE_URL=$SERVICE_URL
    

    Configura l'account di servizio per richiamare Cloud Run

    Il servizio workstation-config-updater che hai deployment non consente chiamate non autenticate.

    Cloud Scheduler richiede un account di servizio con le credenziali appropriate per chiamare il servizio workstation-config-updater.

    Configurare il service account

    1. Se non hai ancora un account di servizio da utilizzare per i job Cloud Scheduler, creane uno nuovo.

      gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \
          --description="$DESCRIPTION" \
          --display-name="$DISPLAY_NAME"
    2. Aggiungi il binding del ruolo IAM necessario per consentire al account di servizio di richiamare Cloud Run.

      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

    Crea una configurazione di Cloud Scheduler con autenticazione

    1. Crea un job e specifica il URL che hai copiato da Esegui il deployment su Cloud Run:

      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

      Questo comando pianifica un job per aumentare le dimensioni del pool di avvio rapido per tutti i WorkstationConfigs in WorkstationCluster $CLUSTER a 2 alle 9:00 PST dal lunedรฌ al venerdรฌ.

      Per ulteriori informazioni, vedi Configurazione delle pianificazioni dei job.

    2. Allo stesso modo, per ridurre a 0 le dimensioni del pool per la configurazione della workstation alla fine di una giornata lavorativa, esegui il seguente comando:

      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

    (Facoltativo) Verifica i job

    Per assicurarti che i job funzionino come previsto, puoi verificarli.

    1. Vai alla pagina Cloud Scheduler nella console Google Cloud .

      Vai a Cloud Scheduler

      workstation-pool-increaser-cron dovrebbe essere visualizzato nell'elenco dei job.

    2. Nella riga del job workstation-pool-increaser-cron, fai clic su Azioni > Forza esecuzione di un job.

      L'esecuzione del primo job creato in un progetto puรฒ richiedere alcuni minuti.

    3. Nella colonna Stato dell'ultima esecuzione, lo stato Success indica che il job รจ stato eseguito correttamente.

    Per verificare che le configurazioni della workstation siano aggiornate:

    1. Vai alla pagina Configurazioni di workstation nella console Google Cloud .

      Vai a Configurazioni di workstation

    2. Verifica che le Dimensioni del pool di avvio rapido siano 2.

    3. Visualizza i log per il tuo servizio Cloud Run.

    Esegui la pulizia

    Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

    Rimuovere il progetto di test

    Per evitare costi aggiuntivi al tuo account Google Cloud , elimina tutte le risorse che hai eseguito il deployment con questa guida rapida.

    Eliminare il repository

    Cloud Run non ti addebita costi quando il servizio di cui hai eseguito il deployment non รจ in uso. Tuttavia, potresti comunque pagare l'archiviazione dell'immagine container in Artifact Registry. Per eliminare i repository Artifact Registry, segui i passaggi descritti in Eliminare i repository nella documentazione di Artifact Registry.

    Eliminare il servizio

    I servizi Cloud Run non comportano costi finchรฉ non ricevono richieste. Per eliminare il servizio Cloud Run, segui uno di questi passaggi:

    Console

    Per eliminare un servizio:

    1. Nella console Google Cloud , vai a Cloud Run:

      Vai a Cloud Run

    2. Individua il servizio che vuoi eliminare nell'elenco dei servizi e fai clic sulla relativa casella di controllo per selezionarlo.

    3. Fai clic su Elimina. Vengono eliminate tutte le revisioni del servizio.

    gcloud

    Per eliminare un servizio, esegui questo comando:

    gcloud run services delete SERVICE --region REGION

    Sostituisci quanto segue:

    • SERVICE: il nome del tuo servizio.
    • REGION: Google Cloud regione del servizio.

    Eliminare il progetto di test

    L'eliminazione del progetto Google Cloud interrompe la fatturazione per tutte le risorse del progetto. Per rilasciare tutte le Google Cloud risorse nel tuo progetto:

    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.

    Elimina i job Cloud Scheduler

    Per eliminare le singole risorse Cloud Scheduler,

    1. Vai alla pagina Cloud Scheduler nella console Google Cloud .

      Vai a Cloud Scheduler

    2. Fai clic sulle caselle di controllo accanto ai tuoi lavori.

    3. Fai clic sul pulsante Elimina in alto nella pagina e conferma l'eliminazione.

    Passaggi successivi

    • Esplora architetture di riferimento, diagrammi e best practice su Google Cloud. Consulta il nostro Cloud Architecture Center.