- 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.
Prepara l'ambiente
Imposta le seguenti variabili di ambiente, che vengono utilizzate dagli script automatizzati che crei in un secondo momento.
Imposta le variabili
PROJECT_ID
eREGION
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
.
Crea un servizio Cloud Run
Il primo passaggio consiste nel configurare un semplice server web per ascoltare le richieste HTTP che ricevi sulla porta 8080. Poiché l'applicazione è containerizzata, puoi scrivere il server in qualsiasi lingua.
Per scrivere l'applicazione listener del server web in Python:
Crea una nuova directory denominata
workstation-config-updater
e accedi alla directory:mkdir workstation-config-updater cd workstation-config-updater
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 scriptupdate_config.sh
.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 iWorkstationConfig
in un determinato cluster e aggiornare le dimensioni del pool di avvio rapido aPOOL_SIZE
.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
Quando ti viene chiesto il nome del servizio, premi Invio per accettare il nome predefinito
workstation-config-updater
.Se ti viene chiesto di abilitare l'API Artifact Registry o di consentire la creazione del repository Artifact Registry, premi y.
Quando ti viene chiesto di consentire chiamate non autenticate, premi n.
Attendi il completamento del deployment.
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
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"
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
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
inWorkstationCluster
$CLUSTER a 2 alle 9:00 PST dal lunedì al venerdì.Per ulteriori informazioni, vedi Configurazione delle pianificazioni dei job.
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.
Vai alla pagina Cloud Scheduler nella console Google Cloud .
workstation-pool-increaser-cron
dovrebbe essere visualizzato nell'elenco dei job.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.
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:
Vai alla pagina Configurazioni di workstation nella console Google Cloud .
Verifica che le Dimensioni del pool di avvio rapido siano 2.
Visualizza i log per il tuo servizio Cloud Run.