Como encontrar os recursos da AWS que ninguém usa

Quatro coisas continuam gerando cobrança na AWS muito depois de ninguém mais usá-las: volumes EBS não anexados a nenhuma instância, Elastic IPs que não estão associados a nada, instâncias EC2 que quase não trabalham e instâncias RDS às quais ninguém se conecta. Dá para encontrar as quatro só com o que a própria AWS já oferece. O trabalho está em repetir a mesma conferência região por região e conta por conta. Aqui vêm, em ordem, como procurar cada uma com a AWS CLI e o que conferir antes de excluir. A região, os IDs de instância, os identificadores de banco de dados e as datas que aparecem nos comandos são exemplos: troque pelos valores do seu ambiente.

Última atualização: 2026-09-22

Por que elas ficam para trás

Ao excluir uma instância EC2, dependendo da configuração, o volume EBS fica. Um Elastic IP alocado para um teste continua reservado depois que a instância some, enquanto ninguém o liberar. Um ambiente de teste que ninguém lembrou de desligar, ou o banco de dados antigo que sobrou depois de uma migração, continuam rodando e gerando cobrança sem que ninguém use.

Cada um custa tão pouco sozinho que não aparece na fatura, então nada chama atenção para ele; e quando quem criou muda de equipe ou sai da empresa, aquilo fica ali como algo que ninguém sabe se pode excluir.

O que saber antes de começar a procurar

EC2, EBS, Elastic IP e RDS são recursos por região. Tanto o console quanto a CLI mostram só o que existe na região que você está olhando, então o que ficou esquecido numa região que ninguém usa é justamente o que passa despercebido. Repita as etapas abaixo em todas as regiões habilitadas.

Desde fevereiro de 2024, todo endereço IPv4 público é cobrado a US$ 0,005 por hora, esteja em uso ou não. Um Elastic IP que não está associado a nada continua custando isso sem servir para nada, então é a primeira coisa a resolver.

  1. Procurar os volumes EBS não anexados

    Um volume com o estado available não está anexado a nenhuma instância. No console, filtre por estado em “Volumes”, dentro do EC2. Pela CLI, este comando lista todos eles.

    aws ec2 describe-volumes --region ap-northeast-1 --filters Name=status,Values=available --query 'Volumes[].[VolumeId,Size,VolumeType,CreateTime]' --output table

    Antes de excluir, confira se o volume ainda pode ser necessário. A tag de nome e a data de criação costumam dizer para que ele servia. Se não der para decidir, tirar um snapshot e só então excluir o volume deixa, na maioria dos casos, um caminho de volta com um custo de armazenamento menor.

  2. Procurar os Elastic IPs não utilizados

    Um endereço que não tem ID de associação é um Elastic IP não utilizado.

    aws ec2 describe-addresses --region ap-northeast-1 --query 'Addresses[?AssociationId==`null`].[PublicIp,AllocationId]' --output table

    Não há nenhuma garantia de recuperar um endereço depois de liberado. Antes de liberar, confira se ele não está em um registro de DNS nem na lista de permissões do firewall de um cliente ou de um parceiro.

  3. Procurar as instâncias EC2 que quase não trabalham

    Olhe a métrica CPUUtilization do CloudWatch com média de mais ou menos duas semanas. Troque a data de início e a de fim pelos 14 dias anteriores ao dia em que você rodar o comando. O que ele devolve é uma única média do período inteiro. Uma instância cuja média não chega a uns poucos por cento é candidata a estar sem uso, ou a ter um tamanho maior do que precisa.

    aws cloudwatch get-metric-statistics --region ap-northeast-1 --namespace AWS/EC2 --metric-name CPUUtilization --dimensions Name=InstanceId,Value=i-0123456789abcdef0 --start-time 2026-09-06T00:00:00Z --end-time 2026-09-20T00:00:00Z --period 1209600 --statistics Average

    Tome cuidado para não decidir só pela CPU. Um job em lote que roda uma vez por mês, uma máquina em espera ou um host bastião são necessários mesmo com a CPU média baixa. Olhe também o tráfego de rede e, no fim, pergunte a quem usa. Com o AWS Compute Optimizer habilitado, é a própria AWS que aponta os candidatos ociosos e superdimensionados.

  4. Procurar as instâncias RDS às quais ninguém se conecta

    Olhe a métrica DatabaseConnections do CloudWatch com média de mais ou menos uma semana. Aqui também, troque as datas pelos últimos 7 dias. Se a média ficar abaixo de 1, é bem provável que nenhuma aplicação esteja se conectando.

    aws cloudwatch get-metric-statistics --region ap-northeast-1 --namespace AWS/RDS --metric-name DatabaseConnections --dimensions Name=DBInstanceIdentifier,Value=mydb --start-time 2026-09-13T00:00:00Z --end-time 2026-09-20T00:00:00Z --period 604800 --statistics Average

    Uma instância RDS parada volta a ligar sozinha depois de 7 dias. Se você tem certeza de que ela não será usada, o caminho seguro é tirar um snapshot final e excluí-la.

  5. Ver tudo de uma vez com as ferramentas da AWS

    Em vez de conferir um por um, dá para deixar que as próprias ferramentas da AWS apontem os candidatos. O Cost Optimization Hub reúne em uma só tela os recursos ociosos e as recomendações de mudança de tamanho, cada uma com a economia estimada. O Compute Optimizer dá recomendações para EC2, EBS e outros serviços. O Trusted Advisor também tem verificações de otimização de custos, mas, para usá-las, é preciso um plano de suporte Business Support+ ou superior.

    Todos são habilitados e usados por conta, ou por organização do AWS Organizations.

Como manter isso em várias contas

Nenhuma das conferências acima se faz uma vez e acabou. Todo dia são criados recursos novos, então isso volta periodicamente, em todas as regiões, uma vez para cada conta sob os seus cuidados.

O Sabaki faz essa conferência sozinho, toda noite, com nada além de uma função IAM somente leitura. As condições são: EC2 abaixo de 5% de uso médio de CPU nos últimos 14 dias, RDS abaixo de 1 conexão em média nos últimos 7 dias, EBS no estado available e Elastic IPs sem associação. Para cada recurso encontrado, ele calcula uma estimativa mensal pelas tarifas sob demanda da tabela de preços da AWS e explica em português por que considerou aquilo desperdício e o que fazer a respeito. A estimativa pressupõe Linux e locação compartilhada, e não inclui descontos nem cobranças como o armazenamento do RDS. As regiões analisadas são aquelas em que houve custo nos últimos 30 dias. No plano Team ou superior, com contas de vários clientes conectadas, dá para ver tudo separado por cliente. O Sabaki nunca exclui nada.

Esses quatro tipos são tudo o que ele detecta. Gateways NAT, balanceadores de carga, snapshots antigos e coisas do tipo ficam de fora, então confira esses com as ferramentas da AWS citadas acima. No plano Free (uma conta), a detecção e as recomendações de economia estão completas. Os detalhes estão em Visibilidade de custos e recomendações de economia na AWS.

Conecte uma função somente leitura e em poucos minutos saem os primeiros resultados

O plano Free inclui uma conta e um usuário, sem cartão de crédito. A única coisa necessária é uma função IAM somente leitura: não se cadastram chaves de acesso nem se pedem permissões de escrita.

Perguntas frequentes relacionadas

Guias relacionados

Se isto ajudou, compartilhe com quem precisa.