Achar de onde veio um gasto inesperado
A fatura veio 40% acima e a pergunta é sempre a mesma: o quê, desde quando, e de quem? Este roteiro vai do total para o recurso específico em poucos passos, sem depender de ferramenta paga.
1. Compare com o mês anterior, por serviço
Seção intitulada “1. Compare com o mês anterior, por serviço”Comece pelo maior nível de agregação e desça só onde a diferença está.
aws ce get-cost-and-usage \ --time-period Start=2026-08-01,End=2026-09-01 \ --granularity MONTHLY --metrics UnblendedCost \ --group-by Type=DIMENSION,Key=SERVICE \ --query 'ResultsByTime[].Groups[].[Keys[0],Metrics.UnblendedCost.Amount]' --output tableRepita para o mês anterior e compare. O serviço com maior delta absoluto é o alvo — não o de maior percentual, que costuma ser um valor pequeno dobrando.
2. Encontre o dia em que começou
Seção intitulada “2. Encontre o dia em que começou”aws ce get-cost-and-usage \ --time-period Start=2026-08-01,End=2026-09-01 \ --granularity DAILY --metrics UnblendedCost \ --filter '{"Dimensions":{"Key":"SERVICE","Values":["Amazon Elastic Compute Cloud - Compute"]}}' \ --query 'ResultsByTime[].[TimePeriod.Start,Total.UnblendedCost.Amount]' --output tableO gráfico diário responde muito mais que o mensal. Um degrau significa recurso criado ou configuração alterada; uma rampa significa crescimento de uso (dados acumulando, tráfego subindo). Anote a data e cruze com o histórico de deploys e de mudanças de infraestrutura daquele dia.
3. Desça para o tipo de uso e o recurso
Seção intitulada “3. Desça para o tipo de uso e o recurso”# o "USAGE_TYPE" é o que separa NAT-Bytes de instância, e egress de armazenamentoaws ce get-cost-and-usage \ --time-period Start=2026-08-01,End=2026-09-01 --granularity MONTHLY \ --metrics UnblendedCost --group-by Type=DIMENSION,Key=USAGE_TYPE \ --filter '{"Dimensions":{"Key":"SERVICE","Values":["EC2 - Other"]}}' \ --query 'ResultsByTime[].Groups[].[Keys[0],Metrics.UnblendedCost.Amount]' --output table
# e por tag, se a alocação estiver em diaaws ce get-cost-and-usage --time-period Start=2026-08-01,End=2026-09-01 \ --granularity MONTHLY --metrics UnblendedCost \ --group-by Type=TAG,Key=timeSe a maior parte do gasto cai em “sem tag”, o problema anterior é de visibilidade — resolva isso em paralelo.
4. Verifique os suspeitos habituais
Seção intitulada “4. Verifique os suspeitos habituais”Quatro causas respondem pela maioria dos casos:
Tráfego e NAT. NatGateway-Bytes e DataTransfer-Regional-Bytes altos indicam
tráfego que deveria ir por endpoint privado ou ficar na mesma zona.
aws logs start-query --log-group-name /vpc/flowlogs \ --start-time $(date -d '2 days ago' +%s) --end-time $(date +%s) \ --query-string 'stats sum(bytes) as total by dstAddr | sort total desc | limit 20'Recursos órfãos.
aws ec2 describe-volumes --filters Name=status,Values=available \ --query 'Volumes[].{id:VolumeId,gb:Size,criado:CreateTime}' --output tableaws ec2 describe-addresses --query 'Addresses[?!AssociationId].PublicIp'aws ec2 describe-snapshots --owner-ids self \ --query 'sort_by(Snapshots,&StartTime)[:20].[SnapshotId,StartTime,VolumeSize]' --output tableLogs sem retenção.
aws logs describe-log-groups \ --query 'reverse(sort_by(logGroups,&storedBytes))[:10].[logGroupName,storedBytes,retentionInDays]' \ --output tableAmbiente esquecido ligado: cluster de POC, banco de teste, instância criada “só para verificar” há três meses. Filtre por tag de ambiente e por data de criação.
5. Confirme a causa antes de agir
Seção intitulada “5. Confirme a causa antes de agir”Antes de apagar qualquer coisa, verifique quem criou e por quê:
aws cloudtrail lookup-events \ --lookup-attributes AttributeKey=ResourceName,AttributeValue=vol-0a1b2c3d \ --max-results 10Recurso sem dono aparente não é recurso sem uso. Pergunte no canal do time antes de remover — e prefira parar antes de apagar, quando as duas opções existirem.
6. Coloque o alerta que faltava
Seção intitulada “6. Coloque o alerta que faltava”O objetivo final não é resolver este mês: é descobrir em dois dias na próxima vez.
# orçamento com alerta por contaaws budgets create-budget --account-id 000000000000 --budget file://orcamento.json \ --notifications-with-subscribers file://notificacoes.json
# detecção de anomalia (barata e eficaz)aws ce create-anomaly-monitor --anomaly-monitor \ '{"MonitorName":"geral","MonitorType":"DIMENSIONAL","MonitorDimension":"SERVICE"}'Some a isso uma revisão semanal de dez minutos com o maior delta por serviço — é o hábito que evita a surpresa mensal.
Se não achar
Seção intitulada “Se não achar”| Sintoma | Onde olhar |
|---|---|
| Gasto sem tag e sem dono | Contas/projetos compartilhados; separe ambientes |
| “EC2 - Other” alto | Quase sempre NAT, EBS ou transferência — use USAGE_TYPE |
| Sobe todo dia um pouco | Dado acumulando: S3, logs, snapshots sem ciclo de vida |
| Pico em um dia só | Job de dados, teste de carga, laço de retry |
| Marketplace ou serviço estranho | Alguém habilitou uma ferramenta; confirme no CloudTrail |
Checklist de pronto
Seção intitulada “Checklist de pronto”- Delta por serviço identificado, em valor absoluto.
- Data de início do aumento localizada no gráfico diário.
- Tipo de uso e recurso específico identificados.
- Órfãos, logs e ambientes esquecidos verificados.
- Causa confirmada na trilha de auditoria antes de remover.
- Orçamento e detecção de anomalia ativos.
- Correção estrutural registrada (tag obrigatória, retenção, endpoint privado).