A gestão de custos na AWS com FinOps começa por uma lista: o que a conta pagou no mês, e o que continua ligado sem servir nenhuma aplicação. Este guia usa a AWS CLI v2 para essa auditoria. Não apague recurso nenhum até alguém confirmar que o ID está órfão.
O enquadramento, sem os comandos, está em como reduzir custos na AWS. A leitura da fatura com a arquitetura é o trabalho da consultoria FinOps.
1. Conferir a conta e a região
Cost Explorer responde em us-east-1. EC2 é regional: o mesmo comando precisa rodar em cada região onde a conta cria recurso.
aws sts get-caller-identity
export AWS_DEFAULT_REGION=us-east-1
A política mínima para os comandos abaixo é ce:GetCostAndUsage, ec2:DescribeVolumes, ec2:DescribeAddresses e ec2:DescribeSnapshots. Sem ce:GetCostAndUsage, o primeiro bloco volta AccessDenied.
2. Custo do mês por serviço
A data final do Cost Explorer é exclusiva. Para setembro de 2026, End é o dia 1 de outubro.
aws ce get-cost-and-usage \
--time-period Start=2026-09-01,End=2026-10-01 \
--granularity MONTHLY \
--metrics UnblendedCost \
--group-by Type=DIMENSION,Key=SERVICE \
--output table
O que interessa na tabela é o serviço fora do esperado: NAT Gateway, Elastic IP e snapshot costumam crescer sem um deploy novo. Anote os três maiores antes de olhar instância por instância.
3. Volumes EBS sem instância
Um volume available não está anexado. A conta continua pagando o GB.
for region in us-east-1 sa-east-1 eu-west-1; do
echo "== $region =="
aws ec2 describe-volumes \
--region "$region" \
--filters Name=status,Values=available \
--query 'Volumes[].{ID:VolumeId,GiB:Size,AZ:AvailabilityZone}' \
--output table
done
Inclua as regiões que a empresa realmente usa. Um volume de 100 GB em available há semanas é candidato a snapshot e exclusão, depois da confirmação do time.
4. IP elástico sem associação
A AWS cobra o Elastic IP que está alocado e não está preso a uma instância ou a um NAT em uso.
aws ec2 describe-addresses \
--region sa-east-1 \
--query 'Addresses[?AssociationId==`null`].[PublicIp,AllocationId]' \
--output table
Repita com --region para cada região. A lista vazia é o resultado saudável. Um IP na lista é um recurso órfão, não um endereço para reaproveitar sem dono.
5. Snapshots antigos do dono da conta
aws ec2 describe-snapshots \
--region sa-east-1 \
--owner-ids self \
--query 'sort_by(Snapshots, &StartTime)[].{ID:SnapshotId,Inicio:StartTime,GiB:VolumeSize}' \
--output table
Snapshots diários sem política de retenção acumulam GB. A regra prática é manter o necessário para restaurar (por exemplo 7 diários e 4 semanais) e apagar o resto com aws ec2 delete-snapshot --snapshot-id snap-... só depois de nomear o que cada um protege.
Conclusão
Esses quatro comandos separam a fatura em serviço, disco solto, IP solto e backup antigo. É a primeira hora de uma auditoria FinOps. Right-sizing de instância e Graviton ficam no artigo de redução de custos na AWS. Quem quer a leitura junto com a mudança de arquitetura parte para a consultoria FinOps.