MÓDULO 12 · 1 SEMANA · CLOUD, CUSTO & OPERAÇÃO

Cloud, Custo & Operação — operar bem é tão importante quanto construir bem

IaC, Kubernetes em produção, CI/CD, GitOps, FinOps, serverless, multi-cloud, platform engineering e operação dia 2. Como engenheiros sênior pensam sobre cloud não como destino, mas como conjunto de trade-offs de custo, operabilidade e vendor lock-in.

Duração ~1 semana
Conceitos 12 fundamentais
Projeto Deploy com IaC + Cost Dashboard
Pré-requisito Módulos 08, 09, 10, 11
Custo Operação Escalabilidade

Doze conceitos que cobrem a dimensão operacional de sistemas em produção: como infra é definida como código, como serviços são entregues com segurança e velocidade, como custos de cloud são medidos e controlados, e como times de engenharia evoluem para plataforma interna que multiplica produtividade. O módulo não ensina a usar consoles específicos de AWS ou GCP — ensina os princípios que transcendem qualquer provider e os trade-offs que guiam decisões de arquitetura de plataforma.

01

Modelos de cloud — IaaS, PaaS, SaaS, FaaS e os trade-offs reais

A pirâmide de abstração: do bare metal ao managed service. O que você controla e o que o provider controla em cada nível. Shared responsibility model. Vendor lock-in como espectro, não dicotomia. Quando managed service é a escolha econômica — e quando é armadilha.

estudar →
02

Infrastructure as Code — Terraform, Pulumi e CDK

Por que IaC é pré-requisito para operação confiável: reproducibilidade, code review, rollback. Terraform: HCL, providers, state file, workspaces. Pulumi: IaC com linguagem de programação real. AWS CDK: constructs e escape hatches. Módulos reutilizáveis. State remoto e locking (S3 + DynamoDB).

estudar →
03

Kubernetes em produção — além do kubectl apply

O que o módulo 01 (containers) não cobriu: recursos e limites, HPA e VPA, PodDisruptionBudget, readiness e liveness probes com semântica correta, NetworkPolicies, RBAC de cluster, NodeAffinity e Tolerations. Namespaces como unidade de isolamento. Por que Kubernetes falha em produção — e como prevenir.

estudar →
04

CI/CD pipelines — GitHub Actions, trunk-based development e deployment seguro

Trunk-based development como pré-requisito para CI/CD real. GitHub Actions: actions, workflows, environments, secrets, OIDC para cloud auth sem chaves permanentes. Pipeline de qualidade: lint, test, SAST, build, push, deploy. Feature flags como substituto de long-lived branches. DORA metrics: como medir a saúde do pipeline.

estudar →
05

GitOps — ArgoCD, Flux e o repositório como fonte da verdade

O princípio GitOps: o estado desejado da infra está no git, e um operator garante convergência. ArgoCD: Applications, ApplicationSets, sync policies. Flux: kustomize-controller e helm-controller. Image update automation. Multi-cluster GitOps. Drift detection: o que fazer quando o cluster diverge do git.

estudar →
06

FinOps e custo de cloud — rightsizing, Reserved Instances e showback

A cultura FinOps (FinOps Foundation): o triângulo velocidade-custo-qualidade em cloud. Tagging obrigatório por serviço e ambiente. Cost Allocation: showback vs chargeback. Rightsizing: como identificar instâncias superprovisionadas. Reserved Instances e Savings Plans: quando o desconto compensa o commitment. Spot instances para workloads tolerantes a falha.

estudar →
07

Serverless — Lambda, Cloud Functions e os trade-offs que ninguém conta

O modelo de execução serverless: evento → instância efêmera → resultado. Cold start: causas, mitigações (provisioned concurrency, SnapStart). Limites que importam: timeout, memória, payload, concorrência. Vendor lock-in real em serverless. Quando serverless é economicamente vantajoso e quando custa mais que containers. Event-driven patterns com Lambda.

estudar →
08

Multi-cloud — trade-offs, portabilidade e vendor lock-in como espectro

Por que a maioria dos argumentos por multi-cloud são mais políticos que técnicos. O custo real de portabilidade: abstrações que funcionam no médio prazo mas comprometem performance. Kubernetes como camada de portabilidade de compute. Dados como o lock-in mais difícil. Quando multi-cloud faz sentido: compliance, resiliência regional, arbitragem de preço.

estudar →
09

Kubernetes avançado — Operators, Custom Resources e automação de plataforma

O padrão Operator: extend Kubernetes com lógica de domínio. Custom Resource Definitions (CRDs). Operator SDK e kubebuilder. Exemplos canônicos: cert-manager, external-secrets-operator, crossplane. Admission webhooks: validação e mutação de recursos na criação. Por que Operators são a forma de empacotar conhecimento operacional.

estudar →
10

Platform engineering — Internal Developer Platform e golden paths

A evolução de "temos um time de DevOps" para "construímos uma plataforma". Internal Developer Platform (IDP): Backstage como developer portal. Golden paths: a opinião que reduz fricção sem eliminar escolha. Team Topologies (Skelton & Pais, 2019): platform team como stream-enabling team. Como medir adoção e valor de plataforma interna.

estudar →
11

Estratégias de deploy — blue-green, canary, rolling e feature flags

Blue-green: dois ambientes, switch de tráfego instantâneo. Rolling: substituição gradual de instâncias. Canary: percentagem do tráfego para a nova versão com observabilidade ativa. Feature flags como deploy desacoplado de release. Rollback: o que cada estratégia garante e o que não garante. Database migrations em deploys sem downtime.

estudar →
12

Operação dia 2 — runbooks, on-call e a maturidade operacional

Dia 1 é o lançamento; dia 2 é tudo o que vem depois — patches, upgrades, capacity planning, resposta a incidentes, rotação de chaves, certificados que vencem. Runbooks como documentação operacional viva. On-call saudável: rodízio, documentação de pager, blameless culture. O custo oculto de software que "funciona mas ninguém sabe operar".

estudar →
princípio orientador

Cloud não é o destino — é um conjunto de trade-offs de custo, operabilidade e responsabilidade. O engenheiro sênior que entende cloud não sabe mais comandos do console; sabe dizer quando um managed service vale o custo e quando cria dependência difícil de sair, quando IaC paga o investimento inicial, e como o custo de cloud escala com as decisões de arquitetura — não com o crescimento do negócio em isolamento. Operar bem é uma habilidade de engenharia tão importante quanto projetar bem.

Cloud e operação são domínios onde as decisões erradas custam dinheiro real, produzem dependências de décadas, e só ficam visíveis quando o problema já está instalado. As perguntas abaixo forçam articular o que está em jogo.

Terraform ou Pulumi para IaC?

Terraform tem ecossistema massivo de providers, comunidade enorme, e HCL que a maioria dos engenheiros de infra já conhece. O problema é que HCL não é uma linguagem de programação — loops e condicionais existem mas são awkward, e abstrações complexas ficam difíceis. Pulumi usa linguagens reais (TypeScript, Python, Go) — o que significa que toda a expressividade de uma linguagem de programação está disponível, e o código pode ser testado com unittest. A decisão prática: Terraform para infra gerida por time de platform/DevOps que já conhece a ferramenta; Pulumi para times de desenvolvimento que querem IaC sem aprender nova linguagem. OpenTofu (fork open source do Terraform pós-mudança de licença em 2023) é alternativa viável para quem quer Terraform sem HashiCorp.

Managed Kubernetes (EKS/GKE/AKS) ou Kubernetes self-managed?

Self-managed Kubernetes (kubeadm, k3s, Talos) dá controle total sobre versão, configuração e custos de control plane — mas exige que o time opere o próprio etcd, gerencie upgrades de cluster, e tenha expertise profunda em Kubernetes. Managed (EKS, GKE, AKS) delega o control plane ao provider: upgrades automáticos, SLA de disponibilidade do API server, integração nativa com IAM/RBAC do provider. O custo extra de EKS ($0.10/hora de cluster) raramente justifica operar o próprio control plane para times com menos de 10 clusters. A exceção: requisitos de air-gap, compliance com dados em jurisdição específica, ou equipe com expertise suficiente para o custo operacional valer.

GitOps (ArgoCD/Flux) ou pipeline push (GitHub Actions)?

Pipeline push: o pipeline de CI tem credenciais de cluster e faz kubectl apply ou helm upgrade. Simples de entender, direto. O problema: o pipeline tem permissões de produção, drift entre o que está rodando e o que está no git não é detectado, e o "estado desejado" fica espalhado entre scripts de pipeline. GitOps: o cluster puxa do git e um operator garante convergência. Drift é detectado e alertado automaticamente. Credenciais de produção nunca ficam no pipeline. O custo: mais uma ferramenta para operar (ArgoCD tem UI, RBAC, e upgrade próprio). Para times com mais de 5 engenheiros e múltiplos ambientes, GitOps paga o investimento. Para times menores ou setup único, pipeline push é pragmático.

Reserved Instances: quanto comprometer e por quanto tempo?

On-demand tem custo zero de compromisso e máxima flexibilidade — paga o preço cheio. Reserved Instance de 1 ano com pagamento upfront dá ~40% de desconto; 3 anos, ~60%. Savings Plans (AWS) são mais flexíveis — commitment de $ por hora, não de instância específica. A análise correta: identificar o baseline estável de compute (quanto você sempre vai precisar, independente de pico) e cobrir com reserva. Excedente fica on-demand ou spot. O erro comum é reservar com base no pico — você paga por capacidade que fica ociosa 20h/dia. Regra prática: reserve 60-70% do baseline histórico de 90 dias, revise trimestralmente.

Platform team ou squads autônomos cada um com sua infra?

Squads completamente autônomos ("you build it, you run it" extremo) maximizam velocidade inicial mas geram fragmentação: 8 squads com 8 formas diferentes de fazer deploy, 8 stacks de observabilidade, 8 modelos de custo opacos para a liderança. Platform team centraliza as preocupações comuns em golden paths — o squad de produto ainda faz deploy de sua aplicação, mas em rails já provisionados pela plataforma. O risco é a plataforma virar gargalo ou burocracia. Team Topologies (Skelton & Pais) oferece o modelo: platform team como "stream-enabling" — reduz carga cognitiva dos squads, não centraliza decisões de produto. A transição faz sentido quando o custo de coordenação entre squads supera o custo de manter a plataforma.

O projeto define toda a infraestrutura de um serviço como código, implementa pipeline de CI/CD completo, e configura um dashboard de custo que torna a fatura de cloud auditável por serviço e por ambiente.

PROJETO PRÁTICO

Deploy com IaC + Cost Dashboard

Definir toda a infraestrutura de um serviço (o do módulo 09 ou 10) em Terraform ou Pulumi: cluster Kubernetes (local com k3d ou EKS/GKE com Free Tier), namespace, RBAC, ingress, secrets via external-secrets-operator. Pipeline GitHub Actions que testa, constrói, publica e faz deploy via GitOps (ArgoCD). Tags de custo em todos os recursos — dashboard no Grafana mostrando custo estimado por serviço e por ambiente.

REQUISITOS
  • Toda a infra definida em IaC: cluster, namespace, service account, ingress, configmaps
  • Secrets gerenciados via external-secrets-operator (não em manifests no git)
  • Pipeline CI/CD: build + test + push de imagem + sync GitOps no merge para main
  • ArgoCD (ou Flux) gerenciando o estado do cluster a partir do repositório
  • Tags de custo obrigatórias em todos os recursos: service, environment, team, owner
  • Readiness e liveness probes configuradas com valores reais (não defaults)
  • Requests e limits de CPU/memória definidos (não sem limite)
  • PodDisruptionBudget garantindo mínimo 1 réplica disponível durante rolling update
  • Dashboard de custo estimado por serviço (Kubecost ou OpenCost em cluster local)
  • terraform plan ou pulumi preview executado no PR como check obrigatório
Custo Operação Qualidade
STACK SUGERIDA POR LINGUAGEM
STACK
Terraform (HCL) + k3d (local) ou EKS Free Tier + ArgoCD + GitHub Actions + external-secrets-operator + Kubecost + Grafana
ESTRUTURA / NOTAS
  • infra/terraform/: providers.tf, main.tf, variables.tf, outputs.tf
  • k8s/: pasta de manifests Kubernetes gerenciada pelo ArgoCD (Kustomize)
  • .github/workflows/: ci.yml (test + build + push) + deploy.yml (sync ArgoCD via API)
  • external-secrets-operator com SecretStore apontando para environment local (arquivo) ou AWS SSM
  • Kubecost community edition com Grafana dashboard de custo por namespace
STACK
Pulumi (Python SDK) + k3d (local) + ArgoCD + GitHub Actions + external-secrets-operator + OpenCost + Grafana
ESTRUTURA / NOTAS
  • infra/__main__.py: Pulumi program definindo cluster, namespace, Helm releases
  • Pulumi.yaml e Pulumi.dev.yaml / Pulumi.prod.yaml para stacks de ambiente
  • GitHub Actions: pulumi preview em PR, pulumi up em merge via OIDC (sem chaves AWS)
  • OpenCost community edition com API de custo consultável por label
  • pytest-pulumi para testes de infraestrutura antes do deploy
STACK
Pulumi (Go SDK) ou Terraform + k3d (local) + Flux + GitHub Actions + external-secrets-operator + OpenCost + Grafana
ESTRUTURA / NOTAS
  • infra/main.go: Pulumi Go program com recursos tipados
  • Flux em vez de ArgoCD: Kustomization CRDs, ImageRepository, ImagePolicy
  • GitHub Actions com OIDC token para Flux notification API (sem credenciais de cluster no pipeline)
  • Makefile targets: make infra-plan, make infra-apply, make cluster-status
  • Go test de integração de infra: verificar que todos os pods estão Ready após deploy
entregável

Repositório com README documentando: o diagrama de infra (o que Terraform/Pulumi cria), o fluxo do pipeline CI/CD de ponta a ponta (commit → PR → merge → deploy automático), screenshot do ArgoCD/Flux mostrando aplicação Synced, e screenshot do dashboard de custo com custo estimado por namespace. Bonus: demonstração de drift detection — alterar manualmente um recurso no cluster e mostrar que o GitOps operator detecta e reverte a divergência.

Cloud e operação aparecem em entrevistas de staff e em empresas com custo de cloud relevante. As perguntas abaixo testam raciocínio de trade-off, não conhecimento de console específico.

Q.01

O que é GitOps e por que ele é diferente de um pipeline de CI/CD convencional que faz kubectl apply? Quais problemas o GitOps resolve que o pipeline push não resolve?

Q.02

Sua empresa está com a fatura de AWS 40% acima do orçamento. Você foi encarregado de investigar. Qual é o processo — por onde você começa, quais ferramentas usa, e quais são as primeiras três hipóteses que você testaria?

Q.03

Explique liveness probe vs readiness probe vs startup probe no Kubernetes. Dê um exemplo onde configurar liveness probe incorretamente pode causar mais dano que não tê-la.

Q.04

Um serviço está em produção mas ninguém sabe como operá-lo — a pessoa que o construiu saiu. O que você faria nos primeiros 30 dias para resolver esse problema de "operação dia 2"?

Q.05

Você está avaliando migrar workloads de VMs para containers Kubernetes para reduzir custo. Quais são os argumentos a favor, os argumentos contra, e o que você precisaria medir para tomar a decisão com dados?