- Agendar aumentos e diminuições automáticos do tamanho do conjunto de início rápido.
- Iniciar automaticamente estações de trabalho de acordo com um horário regular.
Este tutorial ajuda a aumentar e diminuir o tamanho do conjunto de início rápido para corresponder ao horário de funcionamento típico.
Objetivos
- Escreva e implemente um serviço do Cloud Run que atualize o Tamanho do conjunto de início rápido para uma configuração da estação de trabalho.
- Configure uma tarefa do Cloud Scheduler que agende a execução do serviço criado no passo 1 das 09:00 às 17:00, de segunda a sexta-feira, para corresponder ao horário de funcionamento do PST.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
- Cloud Scheduler
- Cloud Run
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.
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 estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI com a sua identidade federada.
gcloud
-
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 estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI com a sua identidade federada.
gcloud
-
Para inicializar a CLI
gcloud
, execute o seguinte comando:gcloud init
Defina as variáveis
PROJECT_ID
eREGION
que planeia usar:PROJECT_ID=$PROJECT_ID REGION=$REGION
Substitua $REGION pelo nome da região que planeia usar, por exemplo,
us-central1
.Para mais informações sobre as regiões disponíveis, consulte o artigo Localizações das Cloud Workstations.
- Cloud Run
para atualizar o tamanho do conjunto de início rápido do
WorkstationConfig
. - Tarefas do Cloud Scheduler
para fazer chamadas num horário definido para atualizar o
WorkstationConfig
. Crie um novo diretório com o nome
workstation-config-updater
e altere o diretório para este:mkdir workstation-config-updater cd workstation-config-updater
Crie um ficheiro com o nome
app.py
e cole o seguinte código no mesmo: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 cria um servidor Web básico que escuta na porta definida pela variável de ambiente
PORT
e executa o scriptupdate_config.sh
.Crie um ficheiro com o nome
update_config.sh
e cole o seguinte código no mesmo:#!/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
Este script usa comandos
gcloud
para listar todos osWorkstationConfig
num determinado cluster e atualizar o respetivo tamanho do conjunto de início rápido paraPOOL_SIZE
.Crie um ficheiro com o nome
Dockerfile
e cole o seguinte código no mesmo: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 coloca a aplicação num contentor para a preparar para implementação no Cloud Run.
Quando lhe for pedido o nome do serviço, prima Enter para aceitar o nome predefinido
workstation-config-updater
.Se lhe for pedido que ative a API Artifact Registry ou que permita a criação do repositório do Artifact Registry, prima y.
Quando lhe for pedido que permita invocações não autenticadas, prima n.
Aguarde até que a implementação esteja concluída.
Quando o URL do serviço for apresentado no seguinte formato, copie-o:
Se ainda não tiver uma conta de serviço que queira usar para tarefas 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 associação de funções do IAM necessária para permitir que a 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 uma tarefa e especifique o
URL
que copiou de Implementar 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
Este comando agenda uma tarefa para aumentar o tamanho do conjunto de início rápido para todos os
WorkstationConfigs
emWorkstationCluster
$CLUSTER para 2 às 09:00 (PST) de segunda a sexta-feira.Para mais informações, consulte o artigo Configurar programações de tarefas.
Da mesma forma, para reduzir o tamanho do conjunto para 0 na configuração da estação de trabalho 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
Aceda à página Cloud Scheduler na Google Cloud consola.
workstation-pool-increaser-cron
deve aparecer na lista de empregos.Na linha da tarefa
workstation-pool-increaser-cron
, clique em Ações > Forçar execução de uma tarefa.A primeira tarefa criada num projeto pode demorar alguns minutos a ser executada.
Na coluna Estado da última execução, um estado
Success
indica que executou a tarefa com êxito.Aceda à página Configurações da estação de trabalho na Google Cloud consola.
Verifique se a dimensão do conjunto de início rápido é 2.
Veja os registos do seu 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.
Aceda à página Cloud Scheduler na Google Cloud consola.
Clique nas caixas de verificação junto aos seus trabalhos.
Clique no botão Eliminar na parte superior da página e confirme a eliminação.
- Explore arquiteturas de referência, diagramas e práticas recomendadas sobre o Google Cloud. Consulte o nosso Centro de arquitetura na nuvem.
Prepare o ambiente
Defina as seguintes variáveis de ambiente, que são usadas pelos scripts automatizados que criar mais tarde.
Arquitetura de aplicações
Esta solução inclui os seguintes Google Cloud componentes:
Crie um serviço do Cloud Run
O primeiro passo é configurar um servidor Web simples para escutar os pedidos HTTP que recebe na porta 8080. Uma vez que a aplicação está contentorizada, pode escrever o seu servidor em qualquer idioma.
Para escrever a aplicação de ouvinte do servidor Web em Python, faça o seguinte:
Implemente no Cloud Run
Para implementar no Cloud Run, execute o seguinte comando:
gcloud run deploy --source . --project $PROJECT_ID --region $REGION
SERVICE_URL=$SERVICE_URL
Configure a conta de serviço para invocar o Cloud Run
O serviço workstation-config-updater que implementou não permite invocações não autenticadas.
O Cloud Scheduler requer uma conta de serviço com as credenciais adequadas para chamar o serviço workstation-config-updater.
Configure a conta de serviço
Crie uma configuração do Cloud Scheduler com autenticação
Opcional: valide os trabalhos
Para se certificar de que os trabalhos estão a funcionar conforme esperado, pode validá-los.
Para verificar se as configurações da estação de trabalho estão atualizadas, faça o seguinte:
Limpar
Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.
Remova o projeto de teste
Embora o Cloud Run não cobre quando o serviço não está em utilização, ainda pode ser-lhe cobrado o armazenamento da imagem do contentor no Artifact Registry. Pode eliminar a imagem do contentor ou eliminar o Google Cloud projeto para evitar incorrer em custos. A eliminação do seu Google Cloud projeto interrompe a faturação de todos os recursos usados nesse projeto.
Elimine tarefas do Cloud Scheduler
Para eliminar recursos individuais do Cloud Scheduler: