Voltar para todos os artigos
Cloud & FinOps2026-10-01

FinOps na AWS: auditar a fatura com AWS CLI

Auditoria FinOps na AWS com AWS CLI: custo por serviço no mês, volumes EBS soltos, IPs elásticos sem uso e snapshots antigos.

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.

Consultoria FinOps e nuvem

Auditoria da fatura e arquitetura multicloud com governança de custo em AWS, GCP e Azure.

Falar sobre FinOps