- Pianificare aumenti e diminuzioni automatici delle dimensioni del pool di avvio rapido.
- Avviare automaticamente le workstation in base a una pianificazione regolare.
Questo tutorial ti aiuta ad aumentare e diminuire le dimensioni del pool di avvio rapido in base all'orario di apertura tipico.
Obiettivi
- Scrivere ed eseguire il deployment di un servizio Cloud Run che aggiorna le dimensioni del pool di avvio rapido per una configurazione di workstation.
- Configurare un job Cloud Scheduler che pianifica l'esecuzione del servizio creato nel passaggio 1 dalle 09:00 alle 17:00, dal lunedì al venerdì, in base all'orario di apertura del fuso orario 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.
Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.
Prima di iniziare
- Accedi al tuo Google Cloud account. Se non hai mai utilizzato Google Cloud, crea un account per valutare il rendimento dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per eseguire, testare ed eseguire il deployment dei carichi di lavoro.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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.enablepermission. 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.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the
gcloudCLI with your federated identity. -
To initialize the
gcloudCLI, run the following command:gcloud init -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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.enablepermission. 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.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the
gcloudCLI with your federated identity. -
To initialize the
gcloudCLI, run the following command:gcloud init
Prepara l'ambiente
Imposta le seguenti variabili di ambiente, utilizzate dagli script automatizzati che creerai in un secondo momento.
Imposta le variabili
PROJECT_IDeREGIONche intendi utilizzare:PROJECT_ID=$PROJECT_ID REGION=$REGIONSostituisci $REGION con il nome della regione che intendi utilizzare, ad esempio
us-central1.Per saperne di più sulle regioni disponibili, consulta 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 impostata per aggiornare
WorkstationConfig.

Crea un servizio Cloud Run
Il 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 di ascolto del server web in Python:
Crea una nuova directory denominata
workstation-config-updatere passa a questa directory:mkdir workstation-config-updater cd workstation-config-updaterCrea un file denominato
app.pye 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 che ascolta sulla porta definita dalla
PORTvariabile di ambiente ed esegue lo scriptupdate_config.sh.Crea un file denominato
update_config.she 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 doneQuesto script utilizza i comandi
gcloudper elencare tutti iWorkstationConfigin un determinato cluster e aggiornarne le dimensioni del pool di avvio rapido aPOOL_SIZE.Crea un file denominato
Dockerfilee 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:appQuesto codice containerizza l'applicazione per prepararla al deployment su Cloud Run.
Esegui il deployment in Cloud Run
Per eseguire il deployment in Cloud Run, esegui il seguente comando:
gcloud run deploy --source . --project $PROJECT_ID --region $REGIONQuando 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 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 il account di servizio per chiamare 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 il account di servizio
Se non hai già un account di servizio che vuoi utilizzare per i job Cloud Scheduler, creane uno nuovo.
gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \ --description="$DESCRIPTION" \ --display-name="$DISPLAY_NAME"Aggiungi l'associazione di ruoli IAM necessaria per consentire al tuo account di servizio di chiamare 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
URLche hai copiato da Esegui il deployment in 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.comQuesto comando pianifica un job per aumentare le dimensioni del pool di avvio rapido di tutti i
WorkstationConfigsinWorkstationCluster$CLUSTER a 2 alle 9:00 PST dal lunedì al venerdì.Per saperne di più, consulta Configurare le 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 Google Cloud console.
workstation-pool-increaser-crondovrebbe essere visualizzato nell'elenco dei job.Nella riga del job
workstation-pool-increaser-cron, fai clic su Azioni > Forza l'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
Successindica che il job è stato eseguito correttamente.
Per verificare che le configurazioni di Workstations siano aggiornate:
Vai alla pagina Configurazioni di Workstations nella Google Cloud console.
Verifica che le dimensioni del pool di avvio rapido siano 2.
Visualizza i log del servizio Cloud Run.
Esegui la pulizia
Per evitare addebiti sul tuo account Google Cloud per le 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
Per evitare addebiti aggiuntivi sul tuo Google Cloud account, elimina tutte le risorse di cui hai eseguito il deployment con questa guida rapida.
Elimina il repository
Cloud Run non addebita costi quando il servizio di cui hai eseguito il deployment non è in uso. Tuttavia, potresti comunque ricevere addebiti per 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.
Elimina il servizio
I servizi Cloud Run non comportano costi finché non ricevono richieste. Per eliminare il servizio Cloud Run, segui una di queste procedure:
Console
Per eliminare un servizio:
Nella Google Cloud console, vai alla pagina Servizi di Cloud Run:
Individua il servizio che vuoi eliminare nell'elenco dei servizi e fai clic sulla relativa casella di controllo per selezionarlo.
Fai clic su Elimina. Vengono eliminate tutte le revisioni del servizio.
gcloud
Per eliminare un servizio, esegui il seguente comando:
gcloud run services delete SERVICE --region REGION
Sostituisci quanto segue:
- SERVICE: nome del servizio.
- REGION: Google Cloud regione del servizio.
Elimina il progetto di test
L'eliminazione del tuo Google Cloud progetto interrompe la fatturazione di tutte le risorse di quel progetto. Per rilasciare tutte le Google Cloud risorse del progetto, segui questi passaggi:
- Nella Google Cloud console, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare e fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto e fai clic su Arresta per eliminare il progetto.
Elimina i job Cloud Scheduler
Per eliminare le singole risorse Cloud Scheduler,
Vai alla pagina Cloud Scheduler nella Google Cloud console.
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 architetture di riferimento, diagrammi e best practice su Google Cloud. Consulta il nostro Cloud Architecture Center.