Introdução: Por que Gerenciar Custos na Cloud?
Gerenciar custos em ambientes cloud é tão crítico quanto arquitetar soluções escaláveis. Muitos projetos começam com orçamentos controlados, mas crescem exponencialmente sem monitoramento adequado. Nesta aula, você aprenderá a implementar um sistema robusto de controle de custos usando Tags, Budgets e Alertas no AWS Cost Explorer, transformando despesas descontroladas em previsibilidade financeira.
O custo total de propriedade (TCO) na cloud depende fundamentalmente de três fatores: visibilidade dos gastos, categorização clara dos recursos e alertas proativos. Dominar essas três áreas é o diferencial entre empresas que lucram com cloud e aquelas que simplesmente migram seus gastos tradicionais para um modelo mais caro.
Implementando Tags para Categorização de Recursos
Estrutura e Estratégia de Tags
Tags são metadados em pares chave-valor que identificam e organizam seus recursos. A estratégia correta começa antes de criar qualquer infraestrutura. Defina categorias como: Environment (prod, dev, staging), Team (backend, frontend, devops), Project (nome-do-projeto) e CostCenter (codigo-financeiro).
Aqui está um exemplo prático usando AWS CLI para criar recursos com tags:
#!/bin/bash
# Criar uma EC2 instance com tags estruturadas
aws ec2 run-instances \
--image-id ami-0c55b159cbfafe1f0 \
--instance-type t3.medium \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Environment,Value=production},{Key=Team,Value=backend},{Key=Project,Value=ecommerce},{Key=CostCenter,Value=CC-001},{Key=Owner,Value=joao.silva}]' \
--region us-east-1
# Criar um bucket S3 com tags
aws s3api create-bucket \
--bucket meu-bucket-producao \
--region us-east-1
aws s3api put-bucket-tagging \
--bucket meu-bucket-producao \
--tagging 'TagSet=[{Key=Environment,Value=production},{Key=Team,Value=data},{Key=Project,Value=analytics}]'
A chave do sucesso é consistência. Estabeleça uma política de tags obrigatórias e use AWS Config para auditar recursos sem tags. Sem isso, aproximadamente 30% dos seus recursos permanecerão "invisíveis" para análise de custos.
Configurando Budgets e Alertas Proativos
Criação de Budgets via AWS SDK
Budgets permitem definir limites de gastos com alertas automáticos. Existem quatro tipos: Cost Budget, Usage Budget, Reservation Budget e Savings Plans Budget. Para a maioria dos casos, Cost Budget é suficiente.
Veja como implementar programaticamente:
import boto3
import json
from datetime import datetime, timedelta
# Inicializar cliente de Budgets
budgets_client = boto3.client('budgets', region_name='us-east-1')
# Definir período de orçamento
start_date = datetime.now().replace(day=1).strftime('%Y-%m-%d')
end_date = (datetime.now().replace(day=1) + timedelta(days=32)).replace(day=1).strftime('%Y-%m-%d')
# Criar um orçamento mensal de $5000
response = budgets_client.create_budget(
AccountId='123456789012',
Budget={
'BudgetName': 'Production-Environment-Budget',
'BudgetLimit': {
'Amount': '5000',
'Unit': 'USD'
},
'TimeUnit': 'MONTHLY',
'BudgetType': 'COST',
'CostFilters': {
'TagKeyValue': ['Environment$production']
},
'PlannedBudgetLimits': {}
},
NotificationWithSubscribers=[
{
'Notification': {
'NotificationType': 'ACTUAL',
'ComparisonOperator': 'GREATER_THAN',
'Threshold': 80,
'ThresholdType': 'PERCENTAGE'
},
'Subscribers': [
{
'SubscriptionType': 'EMAIL',
'Address': 'devops@empresa.com'
}
]
},
{
'Notification': {
'NotificationType': 'FORECASTED',
'ComparisonOperator': 'GREATER_THAN',
'Threshold': 100,
'ThresholdType': 'PERCENTAGE'
},
'Subscribers': [
{
'SubscriptionType': 'SNS',
'Address': 'arn:aws:sns:us-east-1:123456789012:custo-alertas'
}
]
}
]
)
print(f"Orçamento criado: {response}")
A melhor prática é criar budgets em múltiplas camadas: um por environment, um por team e um por projeto crítico. Use notificações em 50%, 80% e 100% do limite para garantir tempo de reação adequado.
Alertas de Custo Automáticos
Além de budgets, configure alertas no Cost Explorer para detectar anomalias. Integre com SNS e Lambda para ações automáticas:
import boto3
import json
# Função Lambda para processar alertas de custo
def lambda_handler(event, context):
sns_client = boto3.client('sns')
ce_client = boto3.client('ce')
# Extrair dados do evento SNS
message = json.loads(event['Records'][0]['Sns']['Message'])
# Se custo exceder 120% do orçamento, escalar
if message['detail-type'] == 'Budget Notification':
if float(message['detail']['budgetSpentAmount']) > 1.2 * float(message['detail']['budgetLimit']):
sns_client.publish(
TopicArn='arn:aws:sns:us-east-1:123456789012:escalacao-financeira',
Subject='CRÍTICO: Orçamento Excedido em 20%',
Message=f"Projeto {message['detail']['budgetName']} gastou ${message['detail']['budgetSpentAmount']}"
)
return {
'statusCode': 200,
'body': json.dumps('Alerta processado com sucesso')
}
Análise Prática no Cost Explorer
Filtragem e Segmentação de Dados
O Cost Explorer oferece análise visual dos gastos. Combine tags, serviços e períodos para identificar padrões. A consulta abaixo filtra custos por environment:
import boto3
from datetime import datetime, timedelta
ce_client = boto3.client('ce', region_name='us-east-1')
# Consultar custos dos últimos 30 dias por tag
end_date = datetime.now().date()
start_date = end_date - timedelta(days=30)
response = ce_client.get_cost_and_usage(
TimePeriod={
'Start': start_date.strftime('%Y-%m-%d'),
'End': end_date.strftime('%Y-%m-%d')
},
Granularity='DAILY',
Metrics=['UnblendedCost'],
Filter={
'Tags': {
'Key': 'Environment',
'Values': ['production']
}
},
GroupBy=[
{
'Type': 'DIMENSION',
'Key': 'SERVICE'
}
]
)
# Processar e exibir resultados
for result in response['ResultsByTime']:
print(f"\nData: {result['TimePeriod']['Start']}")
for group in result['Groups']:
service = group['Keys'][0]
cost = group['Metrics']['UnblendedCost']['Amount']
print(f" {service}: ${float(cost):.2f}")
Use filtros por serviço (EC2, S3, RDS) para identificar maiores consumidores. Combine com análise de tendências para prever gastos futuros e otimizar recursos ociosos.
Conclusão
Dominar billing na cloud exige três ações concretas: primeiro, implemente uma estratégia de tags desde o início — é impossível analisar custos sem categorização adequada. Segundo, crie budgets em múltiplas camadas com alertas progressivos para evitar surpresas no fechamento mensal. Terceiro, revise regularmente o Cost Explorer com foco em anomalias e padrões de crescimento, usando dados para orientar decisões de arquitetura.
A diferença entre uma operação cloud cara e uma rentável é justamente a disciplina na aplicação dessas práticas. Comece hoje mesmo a implementar tags em seus recursos existentes.