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

  • La pianificazione automatica di dimensioni del pool di avvio rapido per aumentare e diminuire.
  • Avvio automatico delle workstation in base a una programmazione regolare.

Questo tutorial ti aiuta ad aumentare e diminuire le dimensioni del pool di avvio rapido in modo che corrispondano agli orari di apertura tipici.

Obiettivi

  1. Scrivi ed esegui il deployment di un servizio Cloud Run che aggiorni le dimensioni del pool di avvio rapido per la configurazione di una workstation.
  2. 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 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 possono essere idonei a una prova senza costi aggiuntivi.

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

  1. 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.
  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Abilita le API Cloud Run, Cloud Scheduler, Cloud Workstations .

    Abilita le API

  5. Installa Google Cloud CLI.
  6. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  7. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  8. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  9. Abilita le API Cloud Run, Cloud Scheduler, Cloud Workstations .

    Abilita le API

  10. Installa Google Cloud CLI.
  11. Per initialize gcloud CLI, esegui questo comando:

    gcloud init

prepara l'ambiente

Imposta le seguenti variabili di ambiente, utilizzate dagli script automatici che crei in seguito.

  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 intendi 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 per WorkstationConfig.
  • Job Cloud Scheduler per effettuare chiamate in base a una pianificazione prestabilita per aggiornare WorkstationConfig.

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

crea un servizio Cloud Run

Questo primo passaggio consiste nel configurare un server web semplice per l'ascolto delle richieste HTTP ricevute sulla porta 8080. Poiché l'applicazione è containerizzata, puoi scrivere il tuo server in qualsiasi linguaggio.

Per scrivere l'applicazione listener del server web in Python, segui questi passaggi:

  1. Crea una nuova directory denominata workstation-config-updater e cambia directory al suo interno:

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

    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 codice seguente al suo interno:

    #!/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 la rispettiva Dimensione del pool di avvio rapido a POOL_SIZE.

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

    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 in Cloud Run.

esegui il deployment in Cloud Run

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

gcloud run deploy --source . --project $PROJECT_ID --region $REGION
  1. Quando ti viene richiesto 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 le 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 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.

Configura l'account di servizio

  1. Se non hai ancora un account di servizio che vuoi utilizzare per i job Cloud Scheduler, crea un nuovo account di servizio.

    gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \
        --description="$DESCRIPTION" \
        --display-name="$DISPLAY_NAME"
    
  2. 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 Cloud Scheduler con autenticazione

  1. Crea un job e specifica il URL che hai copiato da 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.com
    

    Questo comando pianifica un job per aumentare la dimensione del pool di avvio rapido per tutti i WorkstationConfigs di WorkstationCluster $CLUSTER alle 2 alle 9:00 PST da lunedì a venerdì.

    Per ulteriori informazioni, consulta Configurazione delle pianificazioni dei job.

  2. Allo stesso modo, per ridurre a 0 le dimensioni del pool per la configurazione della workstation a 0 al termine di una giornata di lavoro, 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) Verifica i job

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

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

    Vai a Cloud Scheduler

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

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

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

Per verificare che le configurazioni delle workstation siano aggiornate:

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

    Vai a Configurazioni workstation

  2. Verifica che la dimensione del pool di avvio rapido sia 2.

  3. Visualizza i log per il 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 addebiti quando il servizio non è in uso, potresti comunque ricevere addebiti per l'archiviazione dell'immagine container in Artifact Registry. Puoi eliminare l'immagine container o il progetto Google Cloud per evitare addebiti. L'eliminazione del tuo progetto Google Cloud interrompe la fatturazione per tutte le risorse utilizzate all'interno di quel progetto.

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. 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,

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

    Vai a Cloud Scheduler

  2. Fai clic sulle caselle di controllo accanto ai job.

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