Desligar ambientes fora do horário comercial
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.
1. Mapeie o que pode desligar
Seção intitulada “1. Mapeie o que pode desligar”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.
# marque explicitamente o que participa do agendamentoaws ec2 create-tags --resources i-0a1b2c3d \ --tags Key=agendamento,Value=comercial-brtA tag é o contrato: o automatismo só toca no que está marcado, e quem precisa manter algo ligado remove a tag e registra o motivo.
2. Agende parada e retomada
Seção intitulada “2. Agende parada e retomada”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/v1kind: CronJobmetadata: { 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"]# EC2/RDS: um par de agendamentos com EventBridge chamando a APIaws events put-rule --name parar-dev-noite \ --schedule-expression "cron(0 23 ? * MON-FRI *)"aws rds stop-db-instance --db-instance-identifier hom-postgresNa 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.
3. Cuidado com estado e volumes
Seção intitulada “3. Cuidado com estado e volumes”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.
4. Deixe uma saída fácil
Seção intitulada “4. Deixe uma saída fácil”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.
# um comando (ou botão no chat) que liga o ambiente por algumas horaskubectl scale deployment --all --replicas=1 -n homologacaokubectl annotate namespace homologacao pausa-agendamento="$(date -d '+4 hours' -Iseconds)" --overwriteFaça o CronJob respeitar essa anotação e expirar sozinho. Autoatendimento com prazo é o que mantém a prática viva.
5. Meça a economia
Seção intitulada “5. Meça a economia”# compare o custo diário do ambiente antes e depois, por tagaws 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 tableO 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.
Se der errado
Seção intitulada “Se der errado”| 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 |
Checklist de pronto
Seção intitulada “Checklist de pronto”- 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.