- Programar aumentos y disminuciones automáticos del tamaño del grupo de inicio rápido.
- Iniciar automáticamente las estaciones de trabajo de forma periódica.
En este tutorial se explica cómo aumentar y reducir el tamaño del grupo de inicio rápido para que coincida con el horario de trabajo habitual.
Preparar el entorno
Define las siguientes variables de entorno, que utilizan las secuencias de comandos automatizadas que crearás más adelante.
Define las variables
PROJECT_ID
yREGION
que quieras usar:PROJECT_ID=$PROJECT_ID REGION=$REGION
Sustituye $REGION por el nombre de la región que quieras usar (por ejemplo,
us-central1
).Para obtener más información sobre las regiones disponibles, consulta las ubicaciones de Cloud Workstations.
Arquitectura de aplicaciones
Esta solución incluye los siguientes Google Cloud componentes:
- Cloud Run
para actualizar el Tamaño del grupo de inicio rápido de
WorkstationConfig
. - Tareas de Cloud Scheduler
para hacer llamadas en un horario determinado y actualizar el
WorkstationConfig
.
Crear un servicio de Cloud Run
El primer paso consiste en configurar un servidor web sencillo para que escuche las solicitudes HTTP que recibas en el puerto 8080. Como la aplicación está en contenedores, puedes escribir tu servidor en cualquier lenguaje.
Para escribir la aplicación de escucha del servidor web en Python, haz lo siguiente:
Crea un directorio llamado
workstation-config-updater
y cambia al directorio:mkdir workstation-config-updater cd workstation-config-updater
Crea un archivo llamado
app.py
y pega el siguiente código en él: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)
Este código crea un servidor web básico que escucha el puerto definido por la variable de entorno
PORT
y ejecuta la secuencia de comandosupdate_config.sh
.Crea un archivo llamado
update_config.sh
y pega el siguiente código en él:#!/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
Esta secuencia de comandos usa comandos
gcloud
para enumerar todos losWorkstationConfig
de un clúster determinado y actualizar su tamaño de grupo de inicio rápido aPOOL_SIZE
.Crea un archivo llamado
Dockerfile
y pega el siguiente código en él: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
Este código genera un contenedor de la aplicación para que esté lista para desplegarse en Cloud Run.
Desplegar en Cloud Run
Para desplegar en Cloud Run, ejecuta el siguiente comando:
gcloud run deploy --source . --project $PROJECT_ID --region $REGION
Cuando se te pida el nombre del servicio, pulsa Intro para aceptar el nombre predeterminado
workstation-config-updater
.Si se te pide que habilites la API de Artifact Registry o que permitas la creación de un repositorio de Artifact Registry, pulsa y.
Cuando se te pida que permitas las invocaciones sin autenticar, pulsa n.
Espera a que se complete la implementación.
Cuando la URL del servicio se muestre con el siguiente formato, cópiala:
SERVICE_URL=$SERVICE_URL
Configurar la cuenta de servicio para invocar Cloud Run
El servicio workstation-config-updater que has desplegado no permite invocaciones sin autenticar.
Cloud Scheduler requiere una cuenta de servicio que tenga las credenciales adecuadas para llamar al servicio workstation-config-updater.
Configurar la cuenta de servicio
Si aún no tienes una cuenta de servicio que quieras usar para los trabajos de Cloud Scheduler, crea una cuenta de servicio.
gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \ --description="$DESCRIPTION" \ --display-name="$DISPLAY_NAME"
Añade el enlace de rol de gestión de identidades y accesos necesario para permitir que tu cuenta de servicio invoque 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
Crear una configuración de Cloud Scheduler con autenticación
Crea un trabajo y especifica el
URL
que has copiado de Desplegar en 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
Este comando programa un trabajo para aumentar el tamaño del grupo de inicio rápido de todos los
WorkstationConfigs
deWorkstationCluster
$CLUSTER a 2 a las 9:00 (PST) de lunes a viernes.Para obtener más información, consulta Configurar programaciones de trabajos.
Del mismo modo, para reducir el tamaño del grupo de tu configuración de estación de trabajo a 0 al final de un día de trabajo, ejecuta lo siguiente:
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
Opcional: Verifica los trabajos
Para asegurarte de que tus trabajos funcionan correctamente, puedes verificarlos.
Ve a la página Cloud Scheduler de la consola de Google Cloud .
workstation-pool-increaser-cron
debería aparecer en la lista de empleos.En la fila del trabajo
workstation-pool-increaser-cron
, haga clic en Acciones > Forzar la ejecución de un trabajo.La primera tarea creada en un proyecto puede tardar unos minutos en ejecutarse.
En la columna Estado de la última ejecución, el estado
Success
indica que has ejecutado correctamente el trabajo.
Para verificar que las configuraciones de la estación de trabajo se han actualizado, haz lo siguiente:
Ve a la página Configuraciones de estaciones de trabajo de la Google Cloud consola.
Comprueba que el tamaño del grupo de inicio rápido sea 2.
Consulta los registros de tu servicio de Cloud Run.