- Programação de aumentos e reduções automáticas no tamanho do pool de início rápido.
- Iniciar automaticamente as estações de trabalho em uma programação regular.
Este tutorial ajuda você a aumentar e diminuir o tamanho do pool de início rápido para corresponder ao horário comercial típico.
Prepare o ambiente
Defina as seguintes variáveis de ambiente, que são usadas pelos scripts automatizados que você vai criar mais tarde.
Defina as variáveis
PROJECT_ID
eREGION
que você planeja usar:PROJECT_ID=$PROJECT_ID REGION=$REGION
Substitua $REGION pelo nome da região que você planeja usar, por exemplo,
us-central1
.Para mais informações sobre as regiões disponíveis, consulte Locais do Cloud Workstations.
Arquitetura do aplicativo
Esta solução inclui os seguintes componentes do Google Cloud :
- Cloud Run
para atualizar o Tamanho do pool de início rápido do
WorkstationConfig
. - Jobs do Cloud Scheduler
para fazer chamadas em uma programação definida e atualizar o
WorkstationConfig
.
Criar um serviço do Cloud Run
A primeira etapa é configurar um servidor da Web simples para detectar as solicitações HTTP recebidas na porta 8080. Como o aplicativo é conteinerizado, você pode escrever o servidor em qualquer linguagem.
Para escrever o aplicativo listener do servidor da Web em Python, faça o seguinte:
Crie um novo diretório com o nome
workstation-config-updater
e altere o diretório nele:mkdir workstation-config-updater cd workstation-config-updater
Crie um arquivo chamado
app.py
e cole o seguinte código nele: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)
Esse código cria um servidor da Web básico que realiza detecções na porta definida pela variável de ambiente
PORT
e executa o scriptupdate_config.sh
.Crie um arquivo chamado
update_config.sh
e cole o seguinte código nele:#!/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
Esse script usa comandos
gcloud
para listar todos osWorkstationConfig
em um determinado cluster e atualizar o Tamanho do pool de início rápido paraPOOL_SIZE
.Crie um arquivo chamado
Dockerfile
e cole o seguinte código nele: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
Esse código coloca o aplicativo em um contêiner para que ele possa ser implantado no Cloud Run.
Implantar no Cloud Run
Para implantar no Cloud Run, execute o seguinte comando:
gcloud run deploy --source . --project $PROJECT_ID --region $REGION
Quando o nome do serviço for solicitado, pressione Enter para aceitar o nome padrão
workstation-config-updater
.Se você precisar ativar a API Artifact Registry ou permitir a criação do repositório do Artifact Registry, pressione y.
Quando for solicitado que você permita invocações não autenticadas, pressione n.
Aguarde a conclusão da implantação.
Quando o URL do serviço for exibido no seguinte formato, copie-o:
SERVICE_URL=$SERVICE_URL
Configurar a conta de serviço para invocar o Cloud Run
O serviço workstation-config-updater implantado não permite invocações não autenticadas.
O Cloud Scheduler exige uma conta de serviço com as credenciais adequadas para chamar o serviço workstation-config-updater.
Configurar a conta de serviço
Se você ainda não tiver uma conta de serviço que queira usar para jobs do Cloud Scheduler, crie uma nova conta de serviço.
gcloud iam service-accounts create $SERVICE_ACCOUNT_NAME \ --description="$DESCRIPTION" \ --display-name="$DISPLAY_NAME"
Adicione a vinculação de papel do IAM necessária para permitir que sua conta de serviço invoque o 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
Criar uma configuração do Cloud Scheduler com autenticação
Crie um job e especifique o
URL
que você copiou de Implantar no 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
Esse comando programa um job para aumentar o tamanho do pool de início rápido de todos os
WorkstationConfigs
emWorkstationCluster
$CLUSTER para 2 às 9h (horário padrão do Pacífico) de segunda a sexta-feira.Para mais informações, consulte Como configurar programações de jobs.
Da mesma forma, para reduzir o tamanho do pool da configuração da estação de trabalho para 0 no final de um dia de trabalho, execute o seguinte
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: verificar os jobs
Para garantir que seus jobs estejam funcionando conforme o esperado, verifique-os.
Acesse a página Cloud Scheduler no console Google Cloud .
workstation-pool-increaser-cron
vai aparecer na lista de jobs.Na linha do job
workstation-pool-increaser-cron
, clique em Ações > Forçar a execução de um job.A primeira execução do primeiro job criado em um projeto pode levar alguns minutos.
Na coluna Status da última execução, o status
Success
indica que o job foi executado com sucesso.
Para verificar se as configurações da estação de trabalho foram atualizadas, faça o seguinte:
Acesse a página Configurações da estação de trabalho no console Google Cloud .
Verifique se o Tamanho do pool de início rápido é 2.
Confira os registros do serviço do Cloud Run.