Programa operaciones de Workstations con Cloud Scheduler y Cloud Run


En este instructivo, se muestra cómo usar Cloud Scheduler y Cloud Run para realizar automáticamente operaciones como

  • Programar aumentos y disminuciones automáticos en el tamaño del grupo de inicio rápido
  • Inicia estaciones de trabajo automáticamente y de forma periódica.

En este instructivo, se te ayudará a aumentar y disminuir el tamaño del grupo de inicio rápido para que coincida con los horarios de atención típicos.

Objetivos

  1. Escribe e implementa un servicio de Cloud Run que actualice el tamaño del grupo de inicio rápido para la configuración de una estación de trabajo.
  2. Configura un trabajo de Cloud Scheduler que programe el servicio creado en el paso 1 para que se ejecute de 9:00 a 17:00, de lunes a viernes, de modo que coincida con el horario de atención 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. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

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

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. Habilita las API de Cloud Run, Cloud Scheduler, Cloud Workstations .

    Habilita las API

  5. Instala Google Cloud CLI.
  6. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  7. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  8. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  9. Habilita las API de Cloud Run, Cloud Scheduler, Cloud Workstations .

    Habilita las API

  10. Instala Google Cloud CLI.
  11. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init

Prepare el entorno

Configura las siguientes variables de entorno, que usarán las secuencias de comandos automatizadas que crearás más adelante.

  1. Configura las variables PROJECT_ID y REGION 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 a fin de actualizar WorkstationConfig

Diagrama de la arquitectura del sistema en el que se muestra la programación de las operaciones de Workstations con Cloud Scheduler y Cloud Run

Crear un servicio de Cloud Run

Este primer paso es configurar un servidor web simple para que escuche las solicitudes HTTP que recibes en el puerto 8080. Dado que 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:

  1. 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
    
  2. 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 comandos update_config.sh.

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

    En esta secuencia de comandos, se usan comandos de gcloud para enumerar todos los WorkstationConfig en un clúster determinado y actualizar su Tamaño de grupo de inicio rápido a POOL_SIZE.

  4. 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 realizar la implementación en Cloud Run, ejecuta el siguiente comando:

gcloud run deploy --source . --project $PROJECT_ID --region $REGION
  1. Cuando se te solicite el nombre del servicio, presiona Intro para aceptar el nombre predeterminado workstation-config-updater.

  2. Si se te solicita que habilites la API de Artifact Registry o permitas la creación de un repositorio de Artifact Registry, presiona y.

  3. Cuando se te solicite permitir las invocaciones no autenticadas, presiona n.

  4. Espera hasta que se complete la implementación.

  5. 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 station-config-updater que implementaste no permite invocaciones no autenticadas.

Cloud Scheduler requiere una cuenta de servicio con las credenciales adecuadas para llamar al servicio station-config-updater.

Configura la cuenta de servicio

  1. 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"
    
  2. Agrega la vinculación de rol de IAM necesaria para permitir que tu cuenta de servicio invoque a 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

  1. Crea un trabajo y especifica el URL que copiaste de 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
    

    Con este comando, se programa un trabajo a fin de aumentar el tamaño del grupo de inicio rápido para todos los WorkstationConfigs de WorkstationCluster $CLUSTER a 2 a las 9 a.m. PST de lunes a viernes.

    Para obtener más información, consulta Configura programas de trabajo.

  2. 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 laboral, ejecuta el siguiente 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
    

Verifica los trabajos (opcional)

Para asegurarte de que tus trabajos funcionen como se espera, puedes verificarlos.

  1. Ve a la página de Cloud Scheduler en la consola de Google Cloud.

    Ir a Cloud Scheduler

    workstation-pool-increaser-cron debe aparecer en la lista de trabajos.

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

  3. En la columna Estado de la última ejecución, el estado Success indica que ejecutaste tu trabajo con éxito.

Para verificar que los parámetros de configuración de la estación de trabajo estén actualizados, haz lo siguiente:

  1. Ve a la página Configuraciones de estación de trabajo en la consola de Google Cloud.

    Ir a Configuraciones de estaciones de trabajo

  2. Verifica que el Tamaño del grupo de inicio rápido sea 2.

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

  1. En la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Borra trabajos de Cloud Scheduler

Para borrar recursos individuales de Cloud Scheduler,

  1. Ve a la página de Cloud Scheduler en la consola de Google Cloud.

    Ir a Cloud Scheduler

  2. Haz clic en las casillas de verificación junto a tus trabajos.

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