Pular para o conteúdo

Achar de onde veio um gasto inesperado

Intermediário14 min de leituracloud

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.

Comece pelo maior nível de agregação e desça só onde a diferença está.

Janela do terminal
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 table

Repita 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.

Janela do terminal
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 table

O 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.

Janela do terminal
# o "USAGE_TYPE" é o que separa NAT-Bytes de instância, e egress de armazenamento
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=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 dia
aws ce get-cost-and-usage --time-period Start=2026-08-01,End=2026-09-01 \
--granularity MONTHLY --metrics UnblendedCost \
--group-by Type=TAG,Key=time

Se a maior parte do gasto cai em “sem tag”, o problema anterior é de visibilidade — resolva isso em paralelo.

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.

Janela do terminal
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.

Janela do terminal
aws ec2 describe-volumes --filters Name=status,Values=available \
--query 'Volumes[].{id:VolumeId,gb:Size,criado:CreateTime}' --output table
aws ec2 describe-addresses --query 'Addresses[?!AssociationId].PublicIp'
aws ec2 describe-snapshots --owner-ids self \
--query 'sort_by(Snapshots,&StartTime)[:20].[SnapshotId,StartTime,VolumeSize]' --output table

Logs sem retenção.

Janela do terminal
aws logs describe-log-groups \
--query 'reverse(sort_by(logGroups,&storedBytes))[:10].[logGroupName,storedBytes,retentionInDays]' \
--output table

Ambiente 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.

Antes de apagar qualquer coisa, verifique quem criou e por quê:

Janela do terminal
aws cloudtrail lookup-events \
--lookup-attributes AttributeKey=ResourceName,AttributeValue=vol-0a1b2c3d \
--max-results 10

Recurso 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.

O objetivo final não é resolver este mês: é descobrir em dois dias na próxima vez.

Janela do terminal
# orçamento com alerta por conta
aws 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.

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
  • 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).