Estratégias de cost allocation em nuvem por time e produto com tags

1. Fundamentos da Cost Allocation com Tags

1.1. Conceito de tagging como metadado financeiro

Tags são pares chave-valor aplicados a recursos de nuvem para categorizar e rastrear custos. Elas funcionam como metadados financeiros que permitem associar cada centavo gasto a um responsável ou iniciativa específica. Uma tag típica segue o formato chave:valor, como ambiente:producao ou squad:checkout.

1.2. Diferença entre tags de alocação e tags operacionais

Tags de alocação focam em responsabilidade financeira e de negócio:

team:time-alpha
product:checkout
cost-center:fintech

Tags operacionais atendem a necessidades técnicas:

environment:production
automation:terraform
backup:daily
monitoring:enabled

1.3. Modelos de granularidade

A granularidade define o nível de detalhamento da alocação:

  • Por projeto: project:mobile-app
  • Por squad: squad:plataformas
  • Por microserviço: service:payment-gateway
  • Por camada: layer:database

2. Desenho da Estratégia de Tagging para Times e Produtos

2.1. Estrutura hierárquica de tags

Uma hierarquia bem definida permite navegar dos custos mais agregados aos mais detalhados:

owner:time-alpha
product:checkout
cost-center:fintech
service:payment-gateway
environment:production

2.2. Políticas de nomenclatura

Padronização evita inconsistências. Regras recomendadas:

  • Apenas letras minúsculas
  • Hífens para separar palavras
  • Sem espaços ou caracteres especiais
  • Máximo de 50 caracteres por valor

Exemplo de tags seguindo a política:

team:time-checkout
product:payment-flow
env:staging
region:us-east-1

2.3. Tags obrigatórias vs. opcionais

Defina um baseline mínimo que todo recurso deve ter:

Obrigatórias (sem exceção):

team: <nome-do-time>
product: <nome-do-produto>
environment: <dev|staging|prod>

Opcionais (recomendadas):

cost-center: <codigo-centro-custo>
service: <nome-servico>
terraform: true

3. Implementação de Governança e Aplicação Automática de Tags

3.1. Políticas nativas para forçar tags

No AWS, é possível usar SCP para exigir tags em recursos:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": ["ec2:RunInstances", "rds:CreateDBInstance"],
      "Resource": "*",
      "Condition": {
        "Null": {
          "aws:RequestTag/team": "true",
          "aws:RequestTag/product": "true"
        }
      }
    }
  ]
}

3.2. Automação com infraestrutura como código

No Terraform, aplique tags automaticamente em todos os recursos:

locals {
  default_tags = {
    team        = "time-checkout"
    product     = "payment-flow"
    environment = "production"
    terraform   = "true"
  }
}

resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t3.micro"
  tags          = local.default_tags
}

3.3. Estratégias de tag propagation

Para clusters Kubernetes, use tags no nível do cluster e propague para recursos filhos:

# Tag no cluster EKS
tags = {
  team    = "time-plataformas"
  product = "kubernetes-platform"
}

# Namespaces herdam tags via label propagation
kubectl label namespace checkout team=time-checkout

4. Ferramentas de Cost Allocation e Relatórios por Tag

4.1. Configuração de cost allocation tags

No AWS, ative tags de alocação de custo no console de Billing:

1. Acesse AWS Billing and Cost Management
2. Vá em Cost Allocation Tags
3. Selecione as tags team, product, environment
4. Clique em "Activate"

4.2. Criação de dashboards customizados

No AWS Cost Explorer, filtre por tags para criar visões mensais:

Filtro: team = time-checkout
Agrupamento: product
Período: Últimos 3 meses
Gráfico: Barras empilhadas por serviço

4.3. Exportação de dados de billing

Configure a exportação do CUR (Cost and Usage Report) para análise externa:

Bucket S3: billing-reports
Relatório: cur-monthly
Formato: Parquet
Frequência: Diária

5. Metodologia de Rateamento e Showback vs. Chargeback

5.1. Modelo de showback

Exiba os custos sem realizar cobrança real:

Time: time-checkout
Custo total: R$ 45.230,00
Serviços:
  - EC2: R$ 12.400,00
  - RDS: R$ 18.500,00
  - Lambda: R$ 2.330,00
  - Outros: R$ 12.000,00

5.2. Modelo de chargeback

Aloque diretamente os custos para o orçamento do time:

Time: time-checkout
Orçamento mensal: R$ 50.000,00
Custo real: R$ 45.230,00
Saldo: R$ 4.770,00 (disponível)

5.3. Rateamento de custos compartilhados

Para recursos comuns, distribua usando tags de proporção:

Recurso: Cluster Kubernetes (R$ 20.000,00)
Rateamento:
  - namespace checkout (40%): R$ 8.000,00
  - namespace payments (35%): R$ 7.000,00
  - namespace admin (25%): R$ 5.000,00

6. Integração com Ciclo de Vida de Produto e Times

6.1. Onboarding de novos times

Checklist de criação de tags no início do projeto:

1. Definir nome do time: time-checkout
2. Definir nome do produto: payment-flow
3. Criar cost-center: CC-2024-003
4. Escolher ambiente: dev, staging, prod
5. Registrar no repositório de tags

6.2. Revisão periódica de tags

Auditoria trimestral para identificar recursos órfãos:

Query: Recursos sem tag "team" há mais de 30 dias
Ação: Enviar notificação ao proprietário
Prazo: 7 dias para correção
Escalação: Após 14 dias, recurso marcado para desligamento

6.3. Automação de alertas de custo por tag

Notificações quando um time excede orçamento:

Alerta: Custo do time-checkout > 80% do orçamento
Canal: Slack #finops-alerts
Mensagem: "Time Checkout atingiu 85% do orçamento mensal"

7. Desafios Comuns e Mitigações

7.1. Tags não propagadas em recursos legados

Estratégia de backfill automatizado:

Script Python para varrer recursos sem tag
1. Listar todos os recursos da conta
2. Identificar recursos sem tag "team"
3. Aplicar tag "team:unknown"
4. Enviar relatório para time de FinOps

7.2. Inconsistência de tags entre ambientes

Uso de linters e CI/CD para validar tags:

# pipeline.yml
lint-tags:
  script:
    - terraform validate
    - checkov --framework terraform
    - tflint --enable-rule=required_tags

7.3. Limites de tags por recurso e performance

Boas práticas para evitar excesso:

- Máximo de 10 tags por recurso
- Evitar tags dinâmicas (ex: data de criação)
- Usar tags apenas para alocação financeira
- Preferir labels para metadados operacionais

8. Exemplos Práticos de Cenários Reais

8.1. Caso: time de checkout com custos altos de banco de dados

Identificação via tag e ação de otimização:

Cenário: Custo RDS do time-checkout = R$ 18.500,00
Tag: product:checkout, service:rds
Ação: 
  1. Analisar queries lentas
  2. Redimensionar instância de db.r5.xlarge para db.r5.large
  3. Resultado: economia de 40% (R$ 7.400,00/mês)

8.2. Caso: recurso compartilhado cluster Kubernetes

Rateamento por namespace:

Cluster EKS: R$ 15.000,00/mês
Namespaces:
  - checkout: 45% (R$ 6.750,00)
  - payments: 35% (R$ 5.250,00)
  - admin: 20% (R$ 3.000,00)

Tags aplicadas:
  namespace:checkout, team:time-checkout
  namespace:payments, team:time-payments

8.3. Caso: migração de modelo showback para chargeback

Ajuste de tags e comunicação com stakeholders:

Fase 1 (Mês 1-2): Showback
  - Exibir custos por time
  - Coletar feedback

Fase 2 (Mês 3-4): Chargeback piloto
  - 2 times participantes
  - Orçamento definido

Fase 3 (Mês 5+): Chargeback completo
  - Todos os times
  - Automação de alertas
  - Relatórios mensais

Referências