Tem um tipo de fatura que chega com assunto de CFO e tom de CTO. Você já viu. A conta do mês veio maior que a anterior, ninguém mexeu em nada (ou jura que não mexeu), e agora todo mundo quer uma resposta que caiba numa planilha.
Em abril, um cliente nosso (SaaS B2B, ~60 pessoas, São Paulo) pagou USD 47.820 na AWS. Era a terceira vez no ano que a fatura passava a folha do time de engenharia. A gente entrou pra fazer o trabalho chato: explicar o “por quê”, decidir o “o que fica”, e desenhar o “como sai” sem virar religião.
O que a planilha não te conta
Quando alguém abre um dashboard de custo e diz “EC2 é o problema”, quase sempre está olhando pro lugar errado. O total assusta, mas o que manda é a distribuição. Em geral, 2 ou 3 linhas carregam metade do drama.
Nesse caso, a primeira etapa foi abrir o Cost & Usage Report (CUR) dos últimos 6 meses e cruzar com inventário de workloads. Se você nunca mexeu com CUR, é literalmente a exportação mais completa de custo/uso da AWS. (A própria AWS descreve o CUR e os usos típicos aqui: aws-cost-and-usage-reporting.)
| Categoria | USD/mês | % fatura | Observação |
|---|---|---|---|
| EC2 (compute) | 28.140 | 58.8% | 72% reserved, 28% on-demand |
| RDS (Postgres) | 6.420 | 13.4% | r6i.2xlarge × 2, multi-AZ |
| S3 + egress | 5.890 | 12.3% | 71% é egress |
| ELB + NAT GW | 3.210 | 6.7% | NAT GW sozinho: USD 2.840 |
| CloudWatch + logs | 2.180 | 4.6% | retenção de 90 dias em tudo |
| Outros (Lambda, SQS…) | 1.980 | 4.2% | — |
O número que mais chamou atenção não foi “EC2”. Foi o NAT Gateway. Ele é um daqueles itens que ninguém otimiza por acidente. E sim, ele tem cobrança por hora e por GB processado (documentação oficial: NAT Gateway pricing).
O que repatriamos (e o que não repatriamos)
A regra que usamos é simples: se o workload tem carga previsível e não exige elasticidade agressiva, ele vai pra infraestrutura privada. No caso, isso cobriu 19 de 23 workloads.
Aqui está o cluster alvo em números (sem “marketing”, só inventário):
# Cluster prod-br-1 · DC parceiro em SP (Tier III)
control_plane:
nodes: 3
spec: "AMD EPYC 7313P · 32GB · NVMe 1TB"
workers:
pool_a: # compute geral
nodes: 8
spec: "AMD EPYC 7543 · 256GB · NVMe 4TB"
pool_b: # databases
nodes: 3
spec: "AMD EPYC 7443 · 512GB · NVMe 8TB (RAID10)"
networking:
egress: "2× 10Gbps · BGP multi-homed"
# 14 nós no total · custo all-in: USD 9.840/mês (lease + DC + suporte)
A parte mais importante não foi o hardware. Foi não quebrar o fluxo do time. O deploy continuou igual. O CI continuou igual. A rotina continuou igual. Só a fatura mudou.
— lead SRE no projeto
O que ficou na nuvem (e por quê)
Quatro workloads ficaram na AWS, por um motivo bem prático: repatriar por dogma custa caro.
- ETL com burst de GPU — roda poucas horas por semana e precisa de pico. Comprar GPU pra usar 2% do tempo é um jeito eficiente de torrar caixa.
- E-mail transacional — reputação de IP e entregabilidade demoram anos. Não faz sentido recomeçar do zero.
- DNS + CDN — distribuição global não mora num rack em SP.
- Disaster recovery — réplica fria do banco numa região externa. Custo baixo, paz alta.
Total que ficou na AWS: USD 3.420/mês. Total Fixx (cluster + gestão + agente IA): USD 9.840/mês. Total combinado: USD 13.260/mês.
Os números, 18 meses depois
O mês 1 engana. O mês 18 diz a verdade. Aqui estão os indicadores que acompanhamos:
| Métrica | Antes (AWS) | Hoje (Fixx) | Δ |
|---|---|---|---|
| Custo mensal | USD 47.820 | USD 13.260 | −72% |
| p99 latência (checkout) | 340ms | 180ms | −47% |
| MTTR incidente P1 | 52 min | 31 min | −40% |
| Deploys / semana | 38 | 61 | +60% |
| Time SRE (pessoas) | 3 | 4 | +1 |
| Rollbacks emergenciais | 2 / mês | 0 desde mês 4 | — |
A latência cair foi efeito colateral. Tinha um hop de rede desnecessário que sumiu no caminho. O MTTR melhorou por um motivo bem menos “mágico”: o time passou a ver o problema antes do usuário abrir ticket.
O que eu faria diferente
- Não mexer no Postgres no dia 1. A gente moveu o banco no mês 2. Em retrospecto, teria sido melhor estabilizar apps primeiro e mover banco depois. Banco é onde o estresse aparece.
- Comunicar compliance cedo. Alguns clientes corporativos pedem data center nomeado em contrato. Dá pra resolver, mas tem que entrar no cronograma.
- Agente IA não substitui SRE. Ele tira barulho do plantão e melhora triagem. O time continua dono do sistema.