Olá a todos, Jules Martin aqui, de volta ao agntmax.com. Espero que todos estejam bem. Hoje quero falar sobre algo que tem me preocupado ultimamente, algo que tenho visto emergir em mais conversas e retrospectivas de projeto do que gostaria de admitir: o consumo invisível de custos de infraestrutura não otimizados. Todos nós sabemos que precisamos construir rapidamente, escalar rápido e entregar funcionalidades ontem. Mas muitas vezes, nessa pressa, deixamos para trás uma esteira de recursos esquecidos, instâncias superdimensionadas e serviços que operam em modo automático, acumulando faturas que mal olhamos antes que a revisão do orçamento trimestral caia como um tijolo pesado.
Portanto, para este artigo, mergulho de cabeça na otimização de custos, mas com um ângulo muito específico e pertinente: como parar de perder dinheiro em recursos “sempre ativos” que deveriam ser “sob demanda” ou “ativados por evento.” Estamos em 2026, pessoal. Os dias das instâncias de servidor pagas acabaram. Se sua conta na nuvem ainda se parece com uma lista telefônica, é hora de agir.
O Assassino Silencioso: Sempre Ativo Quando Deveria Ser Sob Demanda
Sejamos realistas. Quando estamos sob pressão para lançar uma nova ferramenta para agentes ou uma melhoria no atendimento ao cliente, o custo geralmente passa para segundo plano em relação à funcionalidade e à velocidade. Provisionamos uma instância EC2 que é “grande o suficiente”, talvez até “um pouco maior só por precaução.” Lançamos um banco de dados com IOPS provisionados que poderiam atender toda a Internet, apenas para descobrir que ele permanece principalmente não utilizado durante os horários de baixa. Esquecemos de configurar políticas de escalonamento apropriadas ou simplesmente deixamos as coisas funcionando 24/7 porque, bem, é mais fácil não se preocupar com isso.
Eu vi tudo isso com meus próprios olhos alguns meses atrás com o novo painel de análise interna de um cliente. A equipe, Deus os abençoe, havia construído um sistema incrível que fornecia aos agentes visões em tempo real das interações com os clientes. Foi uma grande vitória para o desempenho. Mas quando a primeira conta completa da nuvem chegou, o diretor financeiro quase teve um ataque cardíaco. Eles haviam provisionado um cluster EKS robusto, algumas instâncias RDS de alta gama e uma infinidade de funções Lambda com alocações de memória generosas, todas funcionando sem interrupção. O golpe final? O painel era utilizado principalmente pelos agentes durante o horário comercial, das 9 às 17, de segunda a sexta. Fora disso, era uma cidade fantasma.
Estavam pagando por uma capacidade de nível empresarial para um sistema que estava efetivamente inativo 70% da semana. É como comprar um carro de Fórmula 1 para ir ao supermercado uma vez por semana.
Identificando os Culpados: Para Onde Realmente Vai o Seu Dinheiro
Antes de poder consertar qualquer coisa, você precisa saber o que está quebrado. A maioria dos provedores de nuvem oferece ferramentas para ajudá-lo a visualizar suas despesas e você deve absolutamente usá-las. AWS Cost Explorer, Azure Cost Management, Google Cloud Billing reports – não são apenas para finanças. Eles são a sua primeira linha de defesa.
Os Culpados Comuns
- Instância de Cálculo (EC2, VMs): Frequentemente são os maiores culpados. Estão superdimensionadas? Estão funcionando quando não deveriam? Você está usando a família de instâncias certa para sua carga de trabalho?
- Banco de Dados (RDS, Azure SQL, Cloud SQL): Assim como para o cálculo, os bancos de dados podem ser superprovisionados para IOPS, CPU ou memória. Muitos agora oferecem opções serverless que se reduzem a zero ou a um custo muito próximo de zero quando estão inativos.
- Armazenamento (volumes EBS, discos não vinculados): Você já iniciou uma instância, a encerrou, mas deixou o volume de armazenamento associado vagando? Isso acontece mais frequentemente do que você pensa.
- Rede (Transferência de dados, NAT Gateways): Os custos de transferência de dados podem te surpreender, especialmente entre as regiões. Os NAT Gateways também têm um custo horário, mesmo que não façam nada.
- Serviços Subutilizados: Você está pagando por um cache Redis dedicado que tem apenas alguns acessos por dia? Um cluster Kafka gerenciado para um fluxo de mensagens?
Meu cliente do relato do painel de análise começou a olhar para seu AWS Cost Explorer. As despesas mais relevantes eram, como era de se esperar, EC2 e RDS. Eles também encontraram alguns volumes EBS vinculados a instâncias encerradas e um NAT Gateway em uma VPC que não era mais utilizada para o tráfego de produção. Pequenas coisas, mas somam.
Estratégias para Transformar Sempre Ativo em Sob Demanda (ou Fora de Pico)
Está bem, você identificou as áreas onde está gastando demais. Vamos para a parte divertida: resolver as coisas. O objetivo não é apenas economizar dinheiro, mas construir um sistema mais resiliente e eficiente que consome recursos apenas quando realmente precisa.
1. Planeje o Início/Parada das Instâncias
Provavelmente é o fruto mais fácil para muitas aplicações. Se suas ferramentas internas ou ambientes de staging são utilizados apenas durante o horário comercial, não há razão para que funcionem 24/7. A maioria dos provedores de nuvem oferece maneiras nativas de programar os ciclos de energia das instâncias, ou você pode criar sua própria solução com funções serverless.
Exemplo Prático: Agendador EC2 AWS com Lambda
Você pode criar uma simples função Lambda acionada por eventos CloudWatch (expressões CRON) para parar e iniciar instâncias EC2 com base nas tags. Aqui está uma versão simplificada do código da função Lambda (Python):
import boto3
def lambda_handler(event, context):
ec2 = boto3.client('ec2')
# Definir tag para identificar as instâncias a serem paradas/iniciadas
# Por exemplo, 'Schedule': 'business-hours'
# Recuperar todas as instâncias em execução com a tag 'Schedule' definida como 'business-hours'
running_instances = ec2.describe_instances(
Filters=[
{'Name': 'instance-state-name', 'Values': ['running']},
{'Name': 'tag:Schedule', 'Values': ['business-hours']}
]
)
stop_instance_ids = []
for reservation in running_instances['Reservations']:
for instance in reservation['Instances']:
stop_instance_ids.append(instance['InstanceId'])
if stop_instance_ids:
print(f"Parar as instâncias: {stop_instance_ids}")
ec2.stop_instances(InstanceIds=stop_instance_ids)
else:
print("Nenhuma instância para parar.")
# --- Lógica semelhante para iniciar instâncias em outro momento ---
# Você teria outra Lambda/Event CloudWatch para iniciar,
# ou combinar a lógica com uma tag 'start'.
return {
'statusCode': 200,
'body': 'Agendamento das instâncias EC2 concluído.'
}
Você deve configurar duas regras de eventos CloudWatch: uma para acionar esta Lambda, digamos, às 18:00 UTC para parar as instâncias, e outra às 7:00 UTC para iniciá-las. Isso por si só pode reduzir os custos de computação em mais de 70% para esses recursos específicos.
2. Adote o Serverless e a Orquestração de Contêineres
Se sua carga de trabalho é realmente esporádica ou ativada por eventos, o serverless é seu melhor aliado. AWS Lambda, Azure Functions, Google Cloud Functions – eles são reduzidos a zero quando não utilizados, o que significa que você paga apenas pela computação quando seu código realmente é executado. É uma mudança enorme em relação ao paradigma “sempre ativo”.
Para aplicações mais complexas que ainda precisam de serviços persistentes, mas têm uma demanda flutuante, as plataformas de orquestração de contêineres como Kubernetes (EKS, AKS, GKE) combinadas com um escalonamento inteligente são poderosas. Os Horizontal Pod Autoscalers (HPA) podem variar o tamanho de seus pods de aplicação com base no uso da CPU ou em métricas personalizadas. Os Cluster Autoscalers também podem adicionar ou remover nós do seu cluster à medida que a demanda muda.
Meu cliente refez partes de seu painel de análise para utilizar Lambda para gerar alguns relatórios que eram solicitados apenas algumas vezes ao dia. Em vez de uma instância EC2 dedicada que executava um cron job, uma função Lambda era acionada por um evento S3 (novos arquivos carregados) ou uma solicitação do API Gateway. As economias foram imediatas e significativas.
3. Escalone Corretamente Seus Bancos de Dados com Serverless ou Auto-Scaling
Os bancos de dados muitas vezes são problemáticos, pois a persistência dos dados é crítica. No entanto, muitos bancos de dados modernos oferecem opções serverless ou de auto-escalonamento que não estavam amplamente disponíveis apenas alguns anos atrás.
- AWS Aurora Serverless v2 : É uma mudança significativa. Ajusta a capacidade com base no uso real, de frações de uma ACU (Unidade de Capacidade Aurora) até centenas, e você paga apenas pelo que usa. Não é mais necessário provisionar para uma capacidade de pico enquanto a maior parte do tempo opera a carga normal.
- Azure SQL Database Serverless : Semelhante ao Aurora Serverless, adapta-se automaticamente à capacidade de computação e entra em pausa quando está inativo, gerando economias significativas para cargas de trabalho intermitentes.
- DynamoDB On-Demand : Para cargas de trabalho NoSQL, o modo de capacidade sob demanda do DynamoDB significa que você paga por cada consulta, sem precisar provisionar unidades de capacidade de leitura/escrita. Perfeito para padrões de tráfego imprevisíveis.
O dashboard analítico usava inicialmente uma instância RDS PostgreSQL de grandes dimensões com provisionamento de IOPS. Após a migração para o Aurora Serverless v2, os custos do banco de dados deles diminuíram em quase **60%**, simplesmente porque não funcionava mais em plena capacidade durante os horários de pico.
4. Limpe os Volumes Não Associados e os Snapshots
Isso pode parecer básico, mas é uma fonte constante de desperdício de dinheiro. Quando você fecha uma instância EC2, seu volume EBS associado nem sempre é eliminado por padrão, especialmente se fosse um volume não raiz. O mesmo se aplica aos snapshots: eles se acumulam rapidamente e podem se tornar caros.
Exemplo Prático: Encontrar e Remover Volumes EBS Não Associados (AWS CLI)
Você pode usar a AWS CLI para encontrar volumes não associados e removê-los. É uma tarefa comum de limpeza.
# Lista todos os volumes não associados
aws ec2 describe-volumes --filters Name=status,Values=available --query 'Volumes[*].[VolumeId,Size,CreateTime]' --output table
# Para excluir um volume específico (CUIDADO, É IRREVERSÍVEL)
# Substitua 'vol-xxxxxxxxxxxxxxxxx' pelo ID do volume real
# aws ec2 delete-volume --volume-id vol-xxxxxxxxxxxxxxxxx
Automatize isso com uma função Lambda programada se você criar e remover ambientes frequentemente. O cliente descobriu vários terabytes de antigos volumes EBS não associados e centenas de snapshots obsoletos. A remoção deles economizou algumas centenas de dólares na conta mensal deles – não é muito, mas cada pequeno gesto conta.
5. Otimize os Custos de Rede
As NAT Gateways são ótimas para permitir que instâncias em sub-redes privadas acessem a Internet, mas implicam custos horários e de processamento de dados. Se você tiver várias NAT Gateways em diferentes zonas de disponibilidade, mas apenas uma estiver sendo usada ativamente, você está pagando por redundâncias.
- Consolide as NAT Gateways: Se sua arquitetura permitir, consolide para menos NAT Gateways.
- Endpoints VPC: Para acessar os serviços AWS como S3 ou DynamoDB do seu VPC, use os Endpoints VPC. O tráfego flui de forma privada dentro da rede AWS, evitando os custos das NAT Gateways e oferecendo melhor segurança.
Descobrimos que o cliente tinha uma NAT Gateway em cada AZ, mesmo que seu aplicativo principal funcionasse apenas em duas. Eles conseguiram consolidar e economizar dessa forma, e então implementaram os Endpoints VPC para acesso ao S3, reduzindo os custos de processamento de dados através da NAT Gateway.
Ações a Serem Tomadas para o Próximo Sprint
Não se trata apenas de reduzir custos; trata-se de construir sistemas mais inteligentes e eficientes, intrinsecamente conscientes dos custos. Aqui está o que você pode começar a fazer desde hoje:
- Audite Regularmente Sua Fatura de Nuvem: Torne isso um hábito. Use as ferramentas de gerenciamento de custos do seu provedor de nuvem. Não deixe apenas para as finanças. Compreenda para onde vai cada dólar.
- Rotule Tudo: Isso é inegociável. Rotule os recursos por projeto, proprietário, ambiente (dev, staging, prod) e se podem ser programados para desligamento. Isso facilita muito a identificação e automação.
- Priorize o Desligamento para Ambientes Não Produtivos: Os ambientes de staging, dev, QA são candidatos ideais para desligamentos programados fora do horário comercial. Esse é geralmente o ganho mais fácil e rápido.
- Avalie o Serverless para Novas Cargas de Trabalho: Se você está construindo algo novo, especialmente microserviços baseados em eventos ou tarefas em segundo plano, considere sempre o serverless primeiro.
- Reavalie Suas Escolhas de Banco de Dados: Se você tem bancos de dados funcionando 24/7 com cargas muito variáveis, examine as opções serverless ou de auto-escalonamento para sua tecnologia de banco de dados específica.
- Automatize a Limpeza: Implemente scripts automatizados ou funções serverless para identificar e remover volumes de armazenamento não associados, snapshots antigos e outros recursos órfãos.
- Eduque Sua Equipe: Promova uma cultura de conscientização de custos. Certifique-se de que os desenvolvedores compreendam as implicações financeiras de suas escolhas de provisionamento. Não é mais apenas um problema operacional.
Parar as perdas relacionadas aos recursos “sempre ativos” não é uma solução temporária; é uma disciplina contínua. Mas ao fazer essas mudanças, você não apenas economizará uma quantia significativa de dinheiro para sua empresa, mas também construirá uma infraestrutura mais ágil, resiliente e pronta para o futuro. E, francamente, isso te torna um ator melhor no campo tecnológico.
É tudo por minha parte desta vez. Continue construindo de forma inteligente, e nos vemos na próxima!
🕒 Published: