- 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.
Objetivos
- Escreva e implante um serviço do Cloud Run que atualiza o Tamanho do pool de início rápido para uma configuração de estação de trabalho.
- Configure um job do Cloud Scheduler que agende o serviço criado na etapa 1 para ser executado das 9h às 17h, de segunda a sexta-feira, para corresponder ao horário comercial do PST.
Custos
Neste documento, você vai usar os seguintes componentes faturáveis do Google Cloud:
- Cloud Scheduler
- Cloud Run
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.
Antes de começar
- 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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Cloud Scheduler, Cloud Workstations APIs.
-
Install the Google Cloud CLI.
-
Se você estiver usando um provedor de identidade externo (IdP), primeiro faça login na CLI
gcloud
com sua identidade federada. -
Para inicializar a CLI
gcloud
, execute o seguinte comando:gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Cloud Scheduler, Cloud Workstations APIs.
-
Install the Google Cloud CLI.
-
Se você estiver usando um provedor de identidade externo (IdP), primeiro faça login na CLI
gcloud
com sua identidade federada. -
Para inicializar a CLI
gcloud
, execute o seguinte comando:gcloud init
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.
- 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
. 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.
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:
Se você ainda não tiver uma conta de serviço para usar nos 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
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
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.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.
- 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.
Acesse a página Cloud Scheduler no console Google Cloud .
Clique nas caixas de seleção ao lado dos seus jobs.
Clique no botão Excluir na parte superior da página e confirme.
- Confira arquiteturas de referência, diagramas, tutoriais e práticas recomendadas do Google Cloud. Confira o Centro de arquitetura do Cloud.
Prepare o ambiente
Defina as seguintes variáveis de ambiente, que são usadas pelos scripts automatizados que você vai criar mais tarde.
Arquitetura do aplicativo
Esta solução inclui os seguintes componentes do Google Cloud :
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 está em contêineres, é possível escrever o servidor em qualquer linguagem.
Para escrever o aplicativo listener do servidor da Web em Python, faça o seguinte:
Implantar no Cloud Run
Para implantar no Cloud Run, execute o seguinte comando:
gcloud run deploy --source . --project $PROJECT_ID --region $REGION
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
Criar uma configuração do Cloud Scheduler com autenticação
Opcional: verificar os jobs
Para garantir que seus jobs estejam funcionando conforme o esperado, verifique-os.
Para verificar se as configurações da estação de trabalho foram atualizadas, faça o seguinte:
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Remover o projeto de teste
Ainda que o Cloud Run não gere custos quando o serviço não estiver em uso, é possível que receba cobranças pelo armazenamento da imagem do contêiner no Artifact Registry. É possível excluir sua imagem de contêiner ou excluir seu projeto do Google Cloud para evitar cobranças. A exclusão do projeto Google Cloud interrompe o faturamento de todos os recursos usados nele.
Excluir jobs do Cloud Scheduler
Para excluir recursos individuais do Cloud Scheduler,