Pular para o conteúdo

Desligar ambientes fora do horário comercial

Iniciante10 min de leituracloud

Ambientes que não são de produção costumam ficar ligados 168 horas por semana e serem usados em cerca de 50. Desligar das 20h às 8h e nos fins de semana corta em torno de 65% do tempo ligado — e é uma das poucas economias que não exige mudança de arquitetura.

Liste por ambiente e classifique. O que costuma poder:

  • Instâncias e nós de desenvolvimento e homologação.
  • Bancos de teste (parada, não exclusão).
  • Clusters de CI com runners ociosos.
  • Ambientes de demonstração e de POC.

O que não deve entrar na regra sem análise: qualquer coisa que produção consuma, jobs noturnos legítimos (backup, ETL, relatório), ambiente usado por time em outro fuso, e qualquer serviço com dado em memória não persistido.

Janela do terminal
# marque explicitamente o que participa do agendamento
aws ec2 create-tags --resources i-0a1b2c3d \
--tags Key=agendamento,Value=comercial-brt

A tag é o contrato: o automatismo só toca no que está marcado, e quem precisa manter algo ligado remove a tag e registra o motivo.

Use fuso local e deixe explícito no nome. O Brasil não tem horário de verão desde 2019, mas escreva o fuso mesmo assim.

# Kubernetes: escala para zero à noite e volta de manhã (horários em UTC)
apiVersion: batch/v1
kind: CronJob
metadata: { name: desligar-hom, namespace: automacao }
spec:
schedule: "0 23 * * 1-5" # 20h BRT, dias úteis
jobTemplate:
spec:
template:
spec:
serviceAccountName: escalonador
restartPolicy: OnFailure
containers:
- name: kubectl
image: bitnami/kubectl:1.31
command: ["sh","-c","kubectl scale deployment --all --replicas=0 -n homologacao"]
Janela do terminal
# EC2/RDS: um par de agendamentos com EventBridge chamando a API
aws events put-rule --name parar-dev-noite \
--schedule-expression "cron(0 23 ? * MON-FRI *)"
aws rds stop-db-instance --db-instance-identifier hom-postgres

Na retomada, lembre da ordem: banco antes da aplicação, e dê tempo de o banco ficar disponível antes de escalar os serviços que dependem dele.

Alguns pontos que geram surpresa desagradável:

  • Parar não é apagar. Instância parada não cobra computação, mas o volume continua cobrando. A economia é da maior parte do custo, não de tudo.
  • RDS parado religa sozinho depois de alguns dias na AWS (limite de 7 dias). Para economia contínua, combine com snapshot e recriação, ou aceite o ciclo.
  • IP público muda ao parar e iniciar, a menos que seja elástico — cuidado com integrações que dependem dele.
  • Escalar a zero em Kubernetes não desliga os nós; combine com o autoscaler de nós para a economia acontecer de fato.
  • StatefulSet e PVC: escalar a zero preserva o volume, e é o comportamento desejado.

Alguém vai precisar trabalhar às 22h. Se a única saída for abrir um ticket, o time desativa o agendamento inteiro na primeira sexta-feira.

Janela do terminal
# um comando (ou botão no chat) que liga o ambiente por algumas horas
kubectl scale deployment --all --replicas=1 -n homologacao
kubectl annotate namespace homologacao pausa-agendamento="$(date -d '+4 hours' -Iseconds)" --overwrite

Faça o CronJob respeitar essa anotação e expirar sozinho. Autoatendimento com prazo é o que mantém a prática viva.

Janela do terminal
# compare o custo diário do ambiente antes e depois, por tag
aws ce get-cost-and-usage --time-period Start=2026-08-01,End=2026-09-01 \
--granularity DAILY --metrics UnblendedCost \
--filter '{"Tags":{"Key":"ambiente","Values":["hom"]}}' \
--query 'ResultsByTime[].[TimePeriod.Start,Total.UnblendedCost.Amount]' --output table

O gráfico diário deve mostrar um degrau claro nos fins de semana. Se não mostrar, algo não está desligando — verifique quais recursos ficaram sem a tag.

Sintoma Causa provável
Ambiente não volta de manhã Job de retomada sem permissão, ou ordem errada de dependências
Economia menor que o esperado Volumes, IPs e nós continuam ativos; só a computação parou
Banco religa sozinho Limite de dias parado do serviço gerenciado
Time desativou tudo Faltou a saída fácil para uso fora do horário
Job noturno legítimo quebrou Faltou excluir da regra; ajuste a tag
  • Inventário do que pode e do que não pode desligar.
  • Tag de agendamento aplicada, e o automatismo só toca no que está marcado.
  • Parada e retomada agendadas, com ordem de dependência.
  • Volumes e IPs considerados na conta de economia.
  • Saída fácil e com prazo para uso fora do horário.
  • Economia medida por tag, com degrau visível nos fins de semana.