- 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Cloud Scheduler, Cloud Workstations APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Cloud Scheduler, Cloud Workstations APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
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 denominado
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 denominado
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 denominado
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.
Na Google Cloud consola, aceda ao Cloud Run:
Localize o serviço que quer eliminar na lista de serviços e clique na caixa de verificação para o selecionar.
Clique em Eliminar. Esta ação elimina todas as revisões do serviço.
- SERVICE: nome do seu serviço.
- REGION: Google Cloud região do serviço.
- 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
Para evitar custos adicionais na sua conta do Google Cloud , elimine todos os recursos implementados com este início rápido.
Elimine o seu repositório
O Cloud Run não lhe cobra nada quando o serviço implementado não está a ser usado. No entanto, ainda pode ser cobrado pelo armazenamento da imagem do contentor no Artifact Registry. Para eliminar repositórios do Artifact Registry, siga os passos em Eliminar repositórios na documentação do Artifact Registry.
Elimine o seu serviço
Os serviços do Cloud Run não incorrem em custos até receberem pedidos. Para eliminar o seu serviço do Cloud Run, siga um destes passos:
Consola
Para eliminar um serviço:
gcloud
Para eliminar um serviço, execute o seguinte comando:
gcloud run services delete SERVICE --region REGION
Substitua o seguinte:
Elimine o projeto de teste
A eliminação do seu projeto Google Cloud interrompe a faturação de todos os recursos nesse projeto. Para libertar todos os Google Cloud recursos no seu projeto, siga estes passos:
Elimine tarefas do Cloud Scheduler
Para eliminar recursos individuais do Cloud Scheduler: