- Programación automática del tamaño del grupo de inicio rápido que aumenta y disminuye.
- Iniciar estaciones de trabajo automáticamente en un programa regular
En este instructivo, se explica cómo aumentar y disminuir el tamaño del grupo de inicio rápido para que coincida con el horario de atención habitual.
Objetivos
- Escribir e implementar un servicio de Cloud Run que actualice el tamaño del grupo de inicio rápido para una configuración de estación de trabajo
- Configura un trabajo de Cloud Scheduler que programe el servicio creado en el paso 1 para que se ejecute de 9:00 a.m. a 5:00 p.m., de lunes a viernes, para que coincida con el horario comercial de PST.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
- Cloud Scheduler
- Cloud Run
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.
Antes de comenzar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Cloud Scheduler, Cloud Workstations APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Cloud Scheduler, Cloud Workstations APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Prepare el entorno
Configura las siguientes variables de entorno, que usan las secuencias de comandos automatizadas que crearás más adelante.
Establece las variables
PROJECT_ID
yREGION
que planeas usar:PROJECT_ID=$PROJECT_ID REGION=$REGION
Reemplaza $REGION por el nombre de la región que planeas usar, por ejemplo,
us-central1
.Para obtener más información sobre las regiones disponibles, consulta Ubicaciones de Cloud Workstations.
Arquitectura de aplicaciones
Esta solución incluye los siguientes componentes de Google Cloud:
- Cloud Run para actualizar el tamaño del grupo de inicio rápido de
WorkstationConfig
. - Trabajos de Cloud Scheduler para realizar llamadas en un programa establecido y actualizar el
WorkstationConfig
Crear un servicio de Cloud Run
El primer paso es configurar un servidor web simple para escuchar las solicitudes HTTP que recibes en el puerto 8080. Como la aplicación está alojada en contenedores, puedes escribir tu servidor en cualquier lenguaje.
Para escribir la aplicación del objeto de escucha del servidor web en Python, haz lo siguiente:
Crea un directorio nuevo llamado
workstation-config-updater
y usa el comando de cambio de directorio en él:mkdir workstation-config-updater cd workstation-config-updater
Crea un archivo llamado
app.py
y pega el código siguiente 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)
Con este código, se crea un servidor web básico que escucha en 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 código siguiente 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
en 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 código siguiente 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 aloja la aplicación en contenedores para que esté lista para implementarse en Cloud Run.
Implementa en Cloud Run
Para implementar en Cloud Run, ejecuta el siguiente comando:
gcloud run deploy --source . --project $PROJECT_ID --region $REGION
Cuando se te solicite el nombre del servicio, presiona Intro para aceptar el nombre predeterminado
workstation-config-updater
.Si se te solicita que habilites la API de Artifact Registry o que permitas la creación del repositorio de Artifact Registry, presiona y.
Cuando se te solicite permitir invocaciones no autenticadas, presiona n.
Espera hasta que se complete la implementación.
Cuando la URL del servicio se muestre en el siguiente formato, cópiala:
SERVICE_URL=$SERVICE_URL
Configura la cuenta de servicio para invocar Cloud Run
El servicio workstation-config-updater que implementaste no permite invocaciones no autenticadas.
Cloud Scheduler requiere una cuenta de servicio que tenga las credenciales adecuadas para llamar al servicio workstation-config-updater.
Configura 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 nueva.
gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \ --description="$DESCRIPTION" \ --display-name="$DISPLAY_NAME"
Agrega la vinculación de roles de IAM necesaria 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
Crea una configuración de Cloud Scheduler con autenticación
Crea un trabajo y especifica el
URL
que copiaste de Implementa 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 una tarea para aumentar el tamaño del grupo de inicio rápido de todos los
WorkstationConfigs
enWorkstationCluster
$CLUSTER a 2 a las 9 a.m. (PST) de lunes a viernes.Para obtener más información, consulta Configura programas de trabajo.
Del mismo modo, para reducir el tamaño del grupo de la configuración de tu 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 funcionen según lo previsto, puedes verificarlos.
Ve a la página de Cloud Scheduler en la consola de Google Cloud.
workstation-pool-increaser-cron
debería aparecer en la lista de trabajos.En la fila del trabajo
workstation-pool-increaser-cron
, haz clic en Acciones > Forzar una ejecución de trabajo.El primer trabajo creado en un proyecto puede tardar unos minutos en ejecutarse.
En la columna Estado de la última ejecución, el estado
Success
indica que ejecutaste tu trabajo de forma correcta.
Para verificar que las configuraciones de Workstation estén actualizadas, haz lo siguiente:
Ve a la página Configuraciones de estaciones de trabajo en la consola de Google Cloud.
Ir a Parámetros de configuración de las estaciones de trabajo
Verifica que el tamaño del grupo de inicio rápido sea 2.
Consulta los registros de tu servicio de Cloud Run.
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Quita el proyecto de prueba
Si bien Cloud Run no cobra cuando el servicio no se usa, es posible que se te cobre por el almacenamiento de la imagen de contenedor en Artifact Registry. Puedes borrar la imagen de contenedor o borrar el proyecto de Google Cloud para evitar que se apliquen cargos. Si borras tu proyecto de Google Cloud, se dejan de facturar todos los recursos que usaste en ese proyecto.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Borra trabajos de Cloud Scheduler
Para borrar recursos individuales de Cloud Scheduler, haz lo siguiente:
Ve a la página de Cloud Scheduler en la consola de Google Cloud.
Haz clic en las casillas de verificación junto a tus trabajos.
Haz clic en el botón Borrar en la parte superior de la página y confirma la eliminación.
¿Qué sigue?
- Explora arquitecturas de referencia, diagramas y prácticas recomendadas sobre Google Cloud. Consulta nuestro Cloud Architecture Center.