Pular para o conteúdo principal

Conceitos FinOps

O que é FinOps?​

FinOps (Financial Operations) é uma prática cultural e uma disciplina que maximiza o valor de negócio da nuvem ao ajudar as equipes de engenharia, finanças e negócios a colaborarem nas decisões de gastos em cloud.

┌─────────────────────────────────────────────────────────────┐
│ FINOPS - AS 3 FASES │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 1. INFORMAR 2. OTIMIZAR │ │
│ │ ─────────── ─────────── │ │
│ │ • Visibilidade de custos • Right-sizing │ │
│ │ • Alocação • Reserved/Savings │ │
│ │ • Orçamentos • Instâncias Spot │ │
│ │ • Previsões • Limpeza │ │
│ │ │ │
│ │ ↓ │ │
│ │ │ │
│ │ 3. OPERAR │ │
│ │ ───────── │ │
│ │ • Governança │ │
│ │ • Automação │ │
│ │ • Melhoria contínua │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘

AWS Cost Explorer​

┌─────────────────────────────────────────────────────────────┐
│ AWS COST EXPLORER │
├─────────────────────────────────────────────────────────────┤
│ │
│ VIEWS PRINCIPAIS: │
│ │
│ 1. POR SERVIÇO │
│ ┌─────────────────────────────────────────────────┐ │
│ │ EC2 ████████████████████ $1,200 (40%)│ │
│ │ RDS ██████████ $600 (20%) │ │
│ │ S3 ████████ $450 (15%) │ │
│ │ Lambda ██████ $300 (10%) │ │
│ │ Other █████ $450 (15%) │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ 2. POR TAG │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Env:Production ██████████████████ $2,100 │ │
│ │ Env:Staging ████████ $600 │ │
│ │ Env:Dev ████ $300 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ 3. POR CONTA │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Prod Account ██████████████████ $2,100 │ │
│ │ Dev Account ████████ $600 │ │
│ │ Shared Services ████ $300 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘

Estratégia de Tagging​

Tags Essenciais​

┌─────────────────────────────────────────────────────────────┐
│ ESTRATÉGIA DE TAGGING │
├─────────────────────────────────────────────────────────────┤
│ │
│ TAGS OBRIGATÓRIAS: │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Tag Valores Exemplo Objetivo │ │
│ │ ─── ─────────────── ──────── │ │
│ │ Environment prod/staging/dev Ambiente │ │
│ │ Project webapp/api/batch Projeto │ │
│ │ Owner team-infra Responsável │ │
│ │ CostCenter CC-1234 Faturamento │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ TAGS RECOMENDADAS: │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Application nome-aplicação Identificação │ │
│ │ CreatedBy terraform/console Rastreabilidade │ │
│ │ ExpiryDate 2024-12-31 Limpeza │ │
│ │ Compliance pci/hipaa Conformidade │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ EXEMPLO COMPLETO: │
│ { │
│ "Environment": "production", │
│ "Project": "ecommerce-api", │
│ "Owner": "team-backend", │
│ "CostCenter": "CC-5678", │
│ "Application": "checkout-service", │
│ "CreatedBy": "terraform" │
│ } │
│ │
└─────────────────────────────────────────────────────────────┘

Enforcement de Tags​

# AWS Config Rule para verificar tags obrigatórias
aws configservice put-config-rule \
--config-rule '{
"ConfigRuleName": "required-tags-ec2",
"Source": {
"Owner": "AWS",
"SourceIdentifier": "REQUIRED_TAGS"
},
"InputParameters": "{\"tag1Key\":\"Environment\",\"tag2Key\":\"Project\",\"tag3Key\":\"Owner\"}",
"Scope": {
"ComplianceResourceTypes": ["AWS::EC2::Instance"]
}
}'

Right-Sizing​

Identificar Recursos Superdimensionados​

┌─────────────────────────────────────────────────────────────┐
│ RIGHT-SIZING │
├─────────────────────────────────────────────────────────────┤
│ │
│ MÉTRICAS PARA ANALISAR: │
│ │
│ CPU Utilização média < 20% │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Instância CPU Avg RAM Avg Recomendação │ │
│ │ ──────── ─────── ─────── ────────────── │ │
│ │ i-web1 15% 30% Reduzir │ │
│ │ i-web2 45% 60% OK │ │
│ │ i-db1 80% 85% Aumentar? │ │
│ │ i-batch 5% 10% Spot ou menor │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ REGRAS PRÁTICAS: │
│ │
│ CPU < 20% por 14+ dias → Candidato a downsizing │
│ CPU > 80% frequentemente → Candidato a upsizing │
│ Memória < 30% → Provável superdimensionamento │
│ │
│ AWS COMPUTE OPTIMIZER: │
│ Serviço gratuito que analisa automaticamente e │
│ recomenda os tipos corretos de instância │
│ │
└─────────────────────────────────────────────────────────────┘

Opções de Pricing​

Comparação​

┌─────────────────────────────────────────────────────────────┐
│ OPÇÕES DE PRICING EC2 │
├─────────────────────────────────────────────────────────────┤
│ │
│ TIPO ECONOMIA COMPROMISSO CASO DE USO │
│ ──── ──────── ────────── ─────────── │
│ │
│ On-Demand 0% Nenhum Dev, testes │
│ (sob demanda) Picos não │
│ previstos │
│ │
│ Reserved (RI) 30-60% 1-3 anos Produção │
│ Standard Tipo fixo estável │
│ │
│ Reserved (RI) 20-40% 1-3 anos Produção │
│ Convertible Flexível evolutiva │
│ │
│ Savings Plans 30-50% 1-3 anos Compute │
│ Compute Flexível multi-serviço │
│ │
│ Spot 60-90% Nenhum Batch, CI/CD │
│ Instances Interrompível Tolerante │
│ │
│ EXEMPLO DE ECONOMIA ANUAL (m5.large em us-east-1): │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ On-Demand : $0.096/h × 8760h = $840/ano │ │
│ │ 1yr RI : $0.060/h × 8760h = $525/ano (-37%) │ │
│ │ 3yr RI : $0.040/h × 8760h = $350/ano (-58%) │ │
│ │ Spot : ~$0.030/h × 8760h = $263/ano (-69%) │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘

Limpeza de Recursos​

Recursos Comumente Esquecidos​

┌─────────────────────────────────────────────────────────────┐
│ RECURSOS ÓRFÃOS │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. EBS VOLUMES NÃO ANEXADOS │
│ aws ec2 describe-volumes \ │
│ --filters Name=status,Values=available │
│ → Excluir ou snapshot e excluir │
│ │
│ 2. ELASTIC IPs NÃO UTILIZADOS │
│ aws ec2 describe-addresses \ │
│ --filters Name=association-id,Values="" │
│ → Custo: $3.65/mês se não anexado! │
│ │
│ 3. SNAPSHOTS ANTIGOS │
│ aws ec2 describe-snapshots --owner-ids self \ │
│ --query 'Snapshots[?StartTime<`2023-01-01`]' │
│ → Avaliar e excluir os obsoletos │
│ │
│ 4. AMIs ANTIGOS │
│ Manter apenas as N últimas versões │
│ │
│ 5. LOAD BALANCERS INUTILIZADOS │
│ ALB/NLB sem targets │
│ → Custo fixo mesmo sem tráfego │
│ │
│ 6. NAT GATEWAYS SUBUTILIZADOS │
│ → $32/mês mínimo + dados │
│ Considere NAT Instance para dev │
│ │
│ 7. INSTÂNCIAS RDS PARADAS │
│ ⚠️ Reiniciam automaticamente após 7 dias! │
│ → Snapshot e delete se não precisar │
│ │
└─────────────────────────────────────────────────────────────┘

Script de Limpeza​

#!/bin/bash
# cleanup-orphans.sh

echo "=== Pesquisa de recursos órfãos ==="

echo -e "\n1. EBS Volumes não anexados:"
aws ec2 describe-volumes \
--filters Name=status,Values=available \
--query 'Volumes[*].[VolumeId,Size,CreateTime]' \
--output table

echo -e "\n2. Elastic IPs não utilizadas:"
aws ec2 describe-addresses \
--query 'Addresses[?AssociationId==null].[PublicIp,AllocationId]' \
--output table

echo -e "\n3. Snapshots > 90 dias:"
NINETY_DAYS_AGO=$(date -d '90 days ago' '+%Y-%m-%d')
aws ec2 describe-snapshots --owner-ids self \
--query "Snapshots[?StartTime<'${NINETY_DAYS_AGO}'].[SnapshotId,VolumeSize,StartTime]" \
--output table

echo -e "\n4. Load Balancers sem targets:"
for alb in $(aws elbv2 describe-load-balancers --query 'LoadBalancers[*].LoadBalancerArn' --output text); do
targets=$(aws elbv2 describe-target-groups --load-balancer-arn $alb --query 'TargetGroups[*].TargetGroupArn' --output text)
if [ -z "$targets" ]; then
echo "ALB sem targets: $alb"
fi
done

echo -e "\n=== Análise concluída ==="

AWS Budgets​

Configuração​

┌─────────────────────────────────────────────────────────────┐
│ AWS BUDGETS │
├─────────────────────────────────────────────────────────────┤
│ │
│ TIPOS DE BUDGETS: │
│ │
│ • Cost Budget : Limite de gastos │
│ • Usage Budget : Limite de uso (horas, GB) │
│ • Reservation Budget : Cobertura RI/Savings Plans │
│ │
│ EXEMPLO DE CONFIGURAÇÃO: │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ Budget Name: Monthly-Production │ │
│ │ Amount: $5,000 │ │
│ │ Period: Monthly │ │
│ │ │ │
│ │ Alertas: │ │
│ │ • 50% ($2,500) → Email informativo │ │
│ │ • 80% ($4,000) → Email de aviso │ │
│ │ • 100% ($5,000) → Email + SMS │ │
│ │ • 110% previsto → Email de alerta │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
# Criar um budget
aws budgets create-budget \
--account-id 123456789012 \
--budget '{
"BudgetName": "Monthly-Limit",
"BudgetLimit": {
"Amount": "5000",
"Unit": "USD"
},
"TimeUnit": "MONTHLY",
"BudgetType": "COST"
}' \
--notifications-with-subscribers '[{
"Notification": {
"NotificationType": "ACTUAL",
"ComparisonOperator": "GREATER_THAN",
"Threshold": 80
},
"Subscribers": [{
"SubscriptionType": "EMAIL",
"Address": "team@example.com"
}]
}]'

Resumo das Recomendações​

DomínioAçãoEconomia Potencial
TaggingImplementar tags obrigatóriasVisibilidade
Right-sizingReduzir instâncias subutilizadas20-40%
Reserved/SPComprometer carga estável30-60%
SpotUsar para workloads flexíveis60-90%
LimpezaRemover recursos órfãos10-20%
BudgetsAlertas proativasControle

Próxima seção: Lab FinOps