- La pianificazione automatica delle dimensioni del pool di avvio rapido aumenta e diminuisce.
- Avvio automatico delle workstation in base a una pianificazione regolare.
Questo tutorial ti aiuta ad aumentare e ridurre le dimensioni del pool di avvio rapido in base all'orario di apertura tipico.
Obiettivi
- Scrivi ed esegui il deployment di un servizio Cloud Run che aggiorna le dimensioni del pool di avvio rapido per una configurazione di workstation.
- Configura un job Cloud Scheduler che pianifica il servizio creato nel passaggio 1 in modo che venga eseguito dalle 09:00 alle 17:00, dal lunedì al venerdì, in base all'orario lavorativo PST.
Costi
In questo documento, utilizzi 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.
Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.
Prima di iniziare
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Cloud Run, Cloud Scheduler, Cloud Workstations .
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Cloud Run, Cloud Scheduler, Cloud Workstations .
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
prepara l'ambiente
Imposta le seguenti variabili di ambiente, utilizzate dagli script automatici creati in seguito.
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, consulta Località di Cloud Workstations.
Architettura dell'applicazione
Questa soluzione include i seguenti componenti di Google Cloud:
- 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
Questo primo passaggio consiste nel configurare un semplice server web per ascoltare le richieste HTTP ricevute sulla porta 8080. Poiché l'applicazione è containerizzata, puoi scrivere il server in qualsiasi linguaggio.
Per scrivere l'applicazione listener del server web in Python, segui questi passaggi:
Crea una nuova directory denominata
workstation-config-updater
e cambiala in questa directory:mkdir workstation-config-updater cd workstation-config-updater
Crea un file denominato
app.py
e incollaci il codice seguente: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 che rimane in ascolto sulla porta definita dalla variabile di ambiente
PORT
ed esegue lo scriptupdate_config.sh
.Crea un file denominato
update_config.sh
e incollaci il codice seguente:#!/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
di un determinato cluster e aggiornare le relative dimensioni del pool di avvio rapido inPOOL_SIZE
.Crea un file denominato
Dockerfile
e incollaci il codice seguente: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 renderla pronta per il deployment su Cloud Run.
Eseguire il deployment in Cloud Run
Per eseguire il deployment in Cloud Run, esegui questo comando:
gcloud run deploy --source . --project $PROJECT_ID --region $REGION
Quando ti viene richiesto il nome del servizio, premi Invio per accettare il nome predefinito
workstation-config-updater
.Se ti viene richiesto di abilitare l'API Artifact Registry o di consentire la creazione di un repository Artifact Registry, premi y.
Quando ti viene chiesto di consentire le 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 di cui hai eseguito il 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 l'account di servizio
Se non hai ancora un account di servizio che vuoi utilizzare per i job di Cloud Scheduler, creane uno nuovo.
gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \ --description="$DESCRIPTION" \ --display-name="$DISPLAY_NAME"
Aggiungi l'associazione del ruolo IAM richiesta per consentire al tuo 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 valore
URL
che hai copiato da Deploy to 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 la dimensione del pool di avvio rapido per tutti i
WorkstationConfigs
diWorkstationCluster
$CLUSTER a 2 alle 9:00 PST da lunedì a venerdì.Per ulteriori informazioni, consulta Configurazione delle pianificazioni dei job.
Analogamente, per ridurre le dimensioni del pool per la configurazione della workstation a 0 al termine di una giornata lavorativa, esegui questo 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) Verificare 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 apparire nell'elenco dei job.Nella riga relativa al 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 di workstation siano aggiornate, segui questi passaggi:
Vai alla pagina Configurazioni 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.
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.
Rimuovi il progetto di test
Sebbene Cloud Run non effettui addebiti quando il servizio non è in uso, potrebbe comunque esserti addebitato il costo per l'archiviazione dell'immagine container in Artifact Registry. Puoi eliminare l'immagine container o eliminare il tuo progetto Google Cloud per evitare addebiti. L'eliminazione del progetto Google Cloud interrompe la fatturazione per tutte le risorse utilizzate all'interno del progetto.
- Nella console Google Cloud, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.
Elimina job Cloud Scheduler
Per eliminare singole risorse Cloud Scheduler,
Vai alla pagina Cloud Scheduler nella console Google Cloud.
Fai clic sulle caselle di controllo accanto ai job.
Fai clic sul pulsante Elimina nella parte superiore della pagina e conferma l'eliminazione.
Passaggi successivi
- Esplora le architetture di riferimento, i diagrammi e le best practice su Google Cloud. Visita il nostro Cloud Architecture Center.