[{"data":1,"prerenderedAt":1089},["ShallowReactive",2],{"blog-\u002Fblog\u002Fcomo-sair-da-aws-sem-reescrever-toda-stack":3,"blog-surround-\u002Fblog\u002Fcomo-sair-da-aws-sem-reescrever-toda-stack":1073,"blog-en-alt-\u002Fblog\u002Fcomo-sair-da-aws-sem-reescrever-toda-stack":1087},{"id":4,"title":5,"author":6,"body":7,"category":1053,"cover":1054,"date":1055,"description":1056,"draft":1057,"extension":1058,"lastReviewed":1054,"meta":1059,"navigation":1060,"path":1061,"readingTime":1062,"seo":1063,"sitemap":1064,"stem":1065,"tags":1066,"__hash__":1072},"blog_pt\u002Fblog\u002Fcomo-sair-da-aws-sem-reescrever-toda-stack.md","Como sair da AWS sem reescrever toda a stack: guia prático 2026","Equipe HeroCtl",{"type":8,"value":9,"toc":1013},"minimark",[10,14,19,22,25,32,35,39,42,45,48,52,55,131,134,138,141,354,357,362,365,368,372,380,383,386,392,396,399,402,406,409,416,419,423,426,429,433,436,439,443,446,450,453,456,460,463,466,469,473,476,487,490,494,497,500,504,507,513,519,522,526,529,535,541,551,557,563,569,575,581,585,588,620,624,627,632,670,675,706,709,712,716,719,722,739,742,745,749,752,758,764,770,776,780,783,797,800,804,807,810,835,838,853,856,858,862,866,869,873,876,880,883,887,893,897,916,920,923,927,930,934,937,941,944,946,950,953,956,989,992,1006,1009],[11,12,13],"p",{},"A maioria dos times brasileiros que pensa em sair da AWS adia indefinidamente porque acredita estar diante de um projeto de \"reescrever toda a stack\". Não é. É um projeto de mapeamento, não de reescrita. E o mapeamento cabe numa planilha de doze linhas.",[15,16,18],"h2",{"id":17},"tldr-o-que-voce-vai-ler-em-tres-minutos","TL;DR — o que você vai ler em três minutos",[11,20,21],{},"Stack típica de SaaS brasileiro usa cerca de doze serviços AWS, e cada um deles tem alternativa portável que custa entre três e sete vezes menos. EC2 vira VPS em qualquer provedor (Hetzner, DigitalOcean, Magalu Cloud). RDS vira Postgres em VPS dedicado, Neon ou Supabase. ElastiCache vira Valkey auto-hospedado. S3 vira Cloudflare R2 ou Backblaze B2 — ambos com API S3-compatível, então o código nem muda. SQS vira fila baseada em Redis ou RabbitMQ. Lambda vira endpoint no app server tradicional ou Cloudflare Workers. ALB vira o roteador integrado do orquestrador. CloudFront vira Cloudflare grátis. IAM vira injeção de secrets no orquestrador.",[11,23,24],{},"Cronograma realista pra startup com cinco a dez aplicações: seis a oito semanas, oitenta a cento e sessenta horas de desenvolvimento. Economia típica: três a sete vezes na conta de infra, com retorno em menos de um mês de salário sênior.",[11,26,27,31],{},[28,29,30],"strong",{},"Não migre se"," o seu compliance exige AWS nominalmente, se o time é único e foca em produto, ou se a stack usa lock-in profundo (DynamoDB com features específicas, Aurora Serverless v2, IAM cross-account complexo).",[11,33,34],{},"━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━",[15,36,38],{"id":37},"por-que-tantos-times-brasileiros-adiam-a-saida-da-aws","Por que tantos times brasileiros adiam a saída da AWS?",[11,40,41],{},"A resposta honesta é confusão entre dois projetos diferentes. \"Sair da AWS\" virou sinônimo mental de \"reescrever a aplicação\". Não é a mesma coisa.",[11,43,44],{},"Reescrever a aplicação é trocar tecnologia central — banco relacional por NoSQL, framework síncrono por reativo, monolito por microsserviços. Isso sim leva trimestres. Sair da AWS é trocar a infra que sustenta a aplicação que você já tem. O código de domínio fica idêntico. Mudam endpoints de banco, credenciais, alguns SDKs e a forma de declarar deploy.",[11,46,47],{},"A confusão dura porque o time olha a console da AWS e vê duzentos serviços. Ninguém usa duzentos. A maior parte usa doze. Mapeie esses doze, encontre alternativa pra cada um, e o que resta é trabalho de execução — não de pesquisa.",[15,49,51],{"id":50},"os-doze-servicos-aws-que-sua-stack-provavelmente-usa","Os doze serviços AWS que sua stack provavelmente usa",[11,53,54],{},"A planilha de início é essa. Tudo o que está fora dela na sua conta provavelmente é satélite — alarme do CloudWatch que ninguém olha, bucket S3 esquecido, função Lambda morta. Foque nos doze:",[56,57,58,65,71,77,83,89,95,101,107,113,119,125],"ol",{},[59,60,61,64],"li",{},[28,62,63],{},"EC2"," — máquinas virtuais que rodam app server e workers",[59,66,67,70],{},[28,68,69],{},"RDS"," — banco relacional gerenciado (Postgres ou MySQL)",[59,72,73,76],{},[28,74,75],{},"ElastiCache"," — Redis pra cache e sessão",[59,78,79,82],{},[28,80,81],{},"S3"," — armazenamento de objetos (uploads, backups, assets)",[59,84,85,88],{},[28,86,87],{},"ALB \u002F NLB"," — balanceador de carga na frente das EC2",[59,90,91,94],{},[28,92,93],{},"CloudFront"," — CDN pra assets estáticos",[59,96,97,100],{},[28,98,99],{},"Route 53"," — DNS autoritativo",[59,102,103,106],{},[28,104,105],{},"SES"," — email transacional",[59,108,109,112],{},[28,110,111],{},"SQS \u002F SNS"," — fila e pub-sub",[59,114,115,118],{},[28,116,117],{},"IAM"," — credenciais e papéis pra serviços conversarem",[59,120,121,124],{},[28,122,123],{},"CloudWatch"," — métricas e logs",[59,126,127,130],{},[28,128,129],{},"Lambda"," — funções serverless",[11,132,133],{},"Se a sua conta tem todos os doze, parabéns: você é a stack mediana. Se tem oito ou nove, melhor — menos coisa pra migrar. Se tem cinco serviços muito específicos (Aurora Global, DynamoDB com Streams, EventBridge complexo), você está num caminho diferente — leia a seção de lock-ins antes de continuar.",[15,135,137],{"id":136},"mapeamento-servico-por-servico-alternativa-custo-e-complexidade","Mapeamento serviço por serviço — alternativa, custo e complexidade",[11,139,140],{},"A tabela abaixo é o atalho. Cada linha tem detalhe expandido depois.",[142,143,144,166],"table",{},[145,146,147],"thead",{},[148,149,150,154,157,160,163],"tr",{},[151,152,153],"th",{},"Serviço AWS",[151,155,156],{},"Alternativa portável",[151,158,159],{},"Custo antes (R$\u002Fmês)",[151,161,162],{},"Custo depois (R$\u002Fmês)",[151,164,165],{},"Complexidade migração",[167,168,169,187,204,220,235,251,265,280,295,311,324,338],"tbody",{},[148,170,171,175,178,181,184],{},[172,173,174],"td",{},"EC2 t3.medium",[172,176,177],{},"VPS Hetzner CPX21",[172,179,180],{},"150",[172,182,183],{},"44",[172,185,186],{},"Baixa",[148,188,189,192,195,198,201],{},[172,190,191],{},"RDS db.t4g.large",[172,193,194],{},"Postgres self-hosted ou Neon",[172,196,197],{},"700",[172,199,200],{},"50–250",[172,202,203],{},"Média",[148,205,206,209,212,215,218],{},[172,207,208],{},"ElastiCache cache.t4g.micro",[172,210,211],{},"Valkey self-hosted",[172,213,214],{},"75",[172,216,217],{},"30",[172,219,203],{},[148,221,222,225,228,231,233],{},[172,223,224],{},"S3 (1TB + egress)",[172,226,227],{},"Cloudflare R2",[172,229,230],{},"600",[172,232,214],{},[172,234,186],{},[148,236,237,240,243,246,249],{},[172,238,239],{},"ALB",[172,241,242],{},"Roteador integrado do orquestrador",[172,244,245],{},"110",[172,247,248],{},"0",[172,250,203],{},[148,252,253,255,258,261,263],{},[172,254,93],{},[172,256,257],{},"Cloudflare grátis",[172,259,260],{},"400",[172,262,248],{},[172,264,186],{},[148,266,267,269,272,275,277],{},[172,268,99],{},[172,270,271],{},"Cloudflare DNS",[172,273,274],{},"25",[172,276,248],{},[172,278,279],{},"Trivial",[148,281,282,284,287,290,293],{},[172,283,105],{},[172,285,286],{},"Resend ou Postmark",[172,288,289],{},"50",[172,291,292],{},"75–100",[172,294,279],{},[148,296,297,299,302,305,308],{},[172,298,111],{},[172,300,301],{},"Redis Streams ou RabbitMQ",[172,303,304],{},"80",[172,306,307],{},"0 (mesma VPS)",[172,309,310],{},"Média–alta",[148,312,313,315,318,320,322],{},[172,314,117],{},[172,316,317],{},"Secrets do orquestrador",[172,319,248],{},[172,321,248],{},[172,323,203],{},[148,325,326,328,331,334,336],{},[172,327,123],{},[172,329,330],{},"Prometheus + Loki",[172,332,333],{},"250",[172,335,307],{},[172,337,203],{},[148,339,340,342,345,348,351],{},[172,341,129],{},[172,343,344],{},"App server ou Cloudflare Workers",[172,346,347],{},"200",[172,349,350],{},"0–60",[172,352,353],{},"Variável",[11,355,356],{},"Câmbio considerado: cinco reais por dólar. Custos de antes assumem stack de SaaS pequeno-médio com cinco a dez aplicações ativas.",[358,359,361],"h3",{"id":360},"ec2-vira-vps-em-qualquer-provedor","EC2 vira VPS em qualquer provedor",[11,363,364],{},"A migração mais óbvia. EC2 t3.medium custa cerca de trinta dólares mensais — cento e cinquenta reais. Hetzner CPX21 com a mesma classe de CPU e mais RAM custa sete euros e noventa e nove — quarenta e quatro reais. DigitalOcean fica no meio. Magalu Cloud é competitivo pra quem prioriza fatura em real e dado em território nacional.",[11,366,367],{},"O caminho técnico é provisionar a VPS, rodar o seu Ansible existente (ou um script de bootstrap simples), copiar o snapshot da EC2 ou subir a imagem do zero. Pra cada servidor, conte de duas a quatro horas. Não é a parte demorada da migração.",[358,369,371],{"id":370},"rds-vira-postgres-self-hosted-ou-neonsupabase","RDS vira Postgres self-hosted ou Neon\u002FSupabase",[11,373,374,375,379],{},"Aqui há três caminhos honestos. O primeiro é Postgres rodando numa VPS dedicada, com backup automatizado via ",[376,377,378],"code",{},"pg_dump"," em cron e replicação física pra um secundário em outra região. Custa o preço da VPS — cinquenta a cem reais mensais — pra substituir um RDS de setecentos.",[11,381,382],{},"O segundo é Neon. Postgres serverless com branching, ramp-up automático, plano gratuito generoso, planos pagos a partir de cinco dólares. Útil pra quem quer abandonar AWS sem assumir operação direta de banco.",[11,384,385],{},"O terceiro é Supabase, que entrega Postgres com APIs adicionais (auth, realtime, storage) e tier gratuito permanente. Faz sentido pra startups que toleram acoplamento ao Supabase em troca de simplicidade.",[11,387,388,389,391],{},"A migração em si é ",[376,390,378],{}," seguido de restore no destino, com janela de manutenção curta — ou replicação lógica com cutover quase sem downtime se o seu Postgres for versão 13 ou superior. Quatro a oito horas dependendo do tamanho da base.",[358,393,395],{"id":394},"elasticache-vira-valkey-self-hosted","ElastiCache vira Valkey self-hosted",[11,397,398],{},"O Redis virou Valkey depois da mudança de licença em 2024 — fork mantido pela Linux Foundation. Roda em qualquer VPS com dois cliques. Trinta reais mensais substituem o ElastiCache de setenta e cinco.",[11,400,401],{},"A migração tem duas etapas. Primeiro, levantar o cluster Valkey com Sentinel pra failover automático. Segundo, popular o cache — script que lê da AWS e grava no destino, ou simplesmente deixar a aplicação preencher organicamente após o cutover (cache cold start de poucos minutos). Três a seis horas de trabalho.",[358,403,405],{"id":404},"s3-vira-cloudflare-r2-ou-backblaze-b2","S3 vira Cloudflare R2 (ou Backblaze B2)",[11,407,408],{},"Esse é o ganho mais imediato. Cloudflare R2 cobra zero pelo egresso — a fatia mais cara do S3 quando você serve assets pra usuários. Quinze centavos de dólar por GB armazenado, contra vinte e três centavos do S3 padrão. Backblaze B2 é uma alternativa quase idêntica, com integração ainda mais barata pra workloads de backup pesado.",[11,410,411,412,415],{},"A migração técnica é trivial: ",[376,413,414],{},"rclone copy s3:meu-bucket r2:meu-bucket"," em paralelo. Um terabyte transfere em torno de doze horas dependendo da banda. O código da aplicação muda exatamente uma linha — o endpoint do cliente S3. Toda biblioteca AWS SDK aceita configuração de endpoint custom; R2 e B2 implementam o protocolo S3 idêntico.",[11,417,418],{},"Volume típico de SaaS médio (cinquenta GB de uploads de usuário): R$75 mensais em R2 contra R$600 em S3 com egresso ativo. A economia paga uma semana de trabalho de migração no primeiro mês.",[358,420,422],{"id":421},"alb-vira-roteador-integrado-do-orquestrador","ALB vira roteador integrado do orquestrador",[11,424,425],{},"Se você está usando ALB, é porque tem várias EC2 atrás dele. A alternativa é o roteador embutido no orquestrador escolhido — HeroCtl, Caddy, ou o roteador embutido em outras stacks self-hosted. O orquestrador descobre os contêineres rodando, abre porta, terminam TLS via Let's Encrypt automático, distribui tráfego.",[11,427,428],{},"A migração troca a definição de target group AWS por uma definição de ingress no manifesto do orquestrador. Quatro a oito horas pra entender as regras certas. Cento e dez reais mensais economizados por balanceador, e o orquestrador aceita quantos hosts você quiser sem cobrança adicional.",[358,430,432],{"id":431},"cloudfront-vira-cloudflare-gratis","CloudFront vira Cloudflare grátis",[11,434,435],{},"Esse merece uma menção em destaque. CloudFront cobra por GB transferido — quem serve vídeo ou downloads pesados sangra. Cloudflare oferece CDN global gratuita no plano free, com cache configurável, mitigação básica de DDoS e WAF rudimentar. Pra a maior parte dos casos de SaaS, é mais que suficiente.",[11,437,438],{},"A migração é trocar os nameservers do domínio pra Cloudflare e configurar regras de cache. Duas a quatro horas. A economia pode ser massiva — quatrocentos reais mensais pra quem tem volume médio de tráfego, milhares pra quem tem volume alto.",[358,440,442],{"id":441},"route-53-vira-cloudflare-dns","Route 53 vira Cloudflare DNS",[11,444,445],{},"DNS no Cloudflare é grátis e mais rápido que Route 53 na maioria das medições públicas. Migração é exportar a zone file, importar no Cloudflare, validar registros, mudar nameservers no registrar. Trinta minutos. Vinte e cinco reais mensais que voltam pro caixa.",[358,447,449],{"id":448},"ses-vira-resend-postmark-ou-mailgun","SES vira Resend, Postmark ou Mailgun",[11,451,452],{},"A AWS é barata pra envio em volume, mas a entregabilidade do SES exige aquecimento de IP e configuração de reputação que tira tempo. Resend cobra vinte dólares por cinquenta mil emails mensais e tem entregabilidade superior fora da caixa. Postmark cobra quinze por dez mil. Mailgun cobre o caso de quem manda muito volume não-transacional.",[11,454,455],{},"A migração é trocar credenciais SMTP no app — uma hora de trabalho.",[358,457,459],{"id":458},"sqs-e-sns-viram-redis-streams-ou-rabbitmq","SQS e SNS viram Redis Streams ou RabbitMQ",[11,461,462],{},"A migração mais delicada. SQS é um serviço que faz uma coisa e faz bem; substituir exige escolher tecnologia de fila e refatorar produtor e consumidor.",[11,464,465],{},"O caminho mais curto é Redis Streams, principalmente se você já está rodando Valkey pra cache. Bibliotecas como Sidekiq (Ruby), BullMQ (Node), RQ (Python) e Asynq (Go) consomem Redis nativamente. RabbitMQ é mais robusto pra cenários de roteamento complexo. NATS é alternativa moderna pra pub-sub.",[11,467,468],{},"Pra cada fila, conte um a três dias dependendo da complexidade. Filas simples de jobs background são triviais. Filas com fan-out, dead letter queues e visibility timeout customizado exigem mais cuidado. Oitenta reais mensais economizados, e a fila roda na mesma VPS que o cache — zero adicional na infra.",[358,470,472],{"id":471},"iam-vira-secrets-do-orquestrador","IAM vira secrets do orquestrador",[11,474,475],{},"Aqui está a migração não-óbvia que pega muito time desprevenido. Na AWS, a aplicação acessa S3 e RDS sem credenciais explícitas no código — a EC2 herda um IAM role e o SDK busca tokens automaticamente. Fora da AWS, isso desaparece.",[11,477,478,479,482,483,486],{},"A solução é injeção de secrets pelo orquestrador. HeroCtl, k3s e similares aceitam secrets como recursos de primeira classe — você declara ",[376,480,481],{},"DATABASE_URL"," ou ",[376,484,485],{},"S3_ACCESS_KEY"," no manifesto do job e o orquestrador injeta como variável de ambiente no contêiner. Pra cenários mais sofisticados, HashiCorp Vault auto-hospedado faz rotação automática.",[11,488,489],{},"A migração é refatorar cada papel IAM em um conjunto de credenciais explícitas, criadas no provedor de destino (Cloudflare API token, Postgres user específico, etc), e declaradas como secrets. Quatro a oito horas pra uma stack média.",[358,491,493],{"id":492},"cloudwatch-vira-prometheus-loki","CloudWatch vira Prometheus + Loki",[11,495,496],{},"Métricas viram Prometheus + Grafana. Logs viram Loki + Grafana. Tudo roda em containers na mesma cluster. Duzentos e cinquenta reais mensais de CloudWatch viram zero adicional.",[11,498,499],{},"A configuração inicial leva cerca de quatro horas pra ficar produtiva: Prometheus com service discovery apontando pros agentes do orquestrador, Loki recebendo via Promtail ou diretamente do runtime de contêiner, Grafana com dashboards básicos. Há posts dedicados a essa migração no blog.",[358,501,503],{"id":502},"lambda-a-parte-mais-dificil","Lambda — a parte mais difícil",[11,505,506],{},"Lambda é o serviço com a maior variância de complexidade na migração. Depende totalmente de como você está usando.",[11,508,509,512],{},[28,510,511],{},"Lambda HTTP simples"," (API Gateway → Lambda → resposta) é trivial. Vira endpoint no seu app server. O código da função muda pouco — handler do framework no lugar do handler do Lambda. Uma a duas horas por função.",[11,514,515,518],{},[28,516,517],{},"Lambda event-driven"," (S3 dispara Lambda, SQS dispara Lambda, EventBridge agenda Lambda) é a parte cara. Pra eventos de S3, R2 oferece eventos via Cloudflare Workers — você reescreve a Lambda como Worker e mantém o padrão. Pra SQS, vira consumer no app server. Pra EventBridge agendado, vira cron no orquestrador.",[11,520,521],{},"Cenário pior: Lambda complexa com EventBridge, Step Functions e dead letter queues encadeados. Aqui é redesign. Reserve uma semana ou duas e desenhe um modelo de eventos mais simples — geralmente o sistema fica melhor.",[15,523,525],{"id":524},"cronograma-realista-de-seis-a-oito-semanas","Cronograma realista de seis a oito semanas",[11,527,528],{},"A ordem importa. Começar pelo banco é tentação e armadilha — banco é o último a migrar, não o primeiro.",[11,530,531,534],{},[28,532,533],{},"Semana 1 — Inventário e decisão."," Lista os doze serviços, anota custo atual, identifica integrações entre eles. Escolhe alternativa pra cada um. Documento de uma página com a tabela de mapeamento. Sem código ainda.",[11,536,537,540],{},[28,538,539],{},"Semana 2 — Provisão do destino em paralelo."," Levanta as VPS, instala o orquestrador (HeroCtl ou similar), configura DNS de teste apontando pra um subdomínio. Sobe Postgres, Valkey, Cloudflare R2. Tudo vazio. Smoke test: um \"hello world\" rodando.",[11,542,543,546,547,550],{},[28,544,545],{},"Semana 3 — Migração de storage."," S3 pra R2 com ",[376,548,549],{},"rclone",". Costuma ser lenta (volume) mas baixíssimo risco. Aplicação ainda lê de S3, mas você valida que R2 está sincronizado. No fim da semana, dual-write — aplicação escreve nos dois.",[11,552,553,556],{},[28,554,555],{},"Semana 4 — Migração do banco."," Réplica lógica de Postgres do RDS pro destino. Cutover numa janela de manutenção curta — costuma ser minutos, não horas, com replicação lógica funcionando. Aplicação aponta pro novo banco. RDS fica como hot standby por uma semana.",[11,558,559,562],{},[28,560,561],{},"Semana 5 — Migração de aplicações web."," Apps que rodam em EC2 viram jobs no orquestrador. Roteador integrado faz o papel do ALB. DNS aponta pro orquestrador (ou pra Cloudflare na frente dele). Cutover gradual usando weighted DNS.",[11,564,565,568],{},[28,566,567],{},"Semana 6 — Filas e jobs assíncronos."," SQS sai, Redis Streams ou RabbitMQ entra. Workers rodam no orquestrador. Período de dual-consume pra garantir que nenhuma mensagem cai.",[11,570,571,574],{},[28,572,573],{},"Semana 7 — Lambdas e workloads event-driven."," A semana mais variável. Lambdas HTTP migram rapidamente. Lambdas event-driven exigem o redesign discutido acima. Se você tem mais de dez Lambdas complexas, considere estender pra duas semanas.",[11,576,577,580],{},[28,578,579],{},"Semana 8 — Cutover final, monitoramento intensivo, decommission."," Cloudflare na frente substitui CloudFront. Route 53 vira Cloudflare DNS. CloudWatch vai pra Prometheus + Loki. Última coisa: desliga as EC2 antigas e fecha a conta AWS — ou deixa um saldo mínimo se você ainda mantém algum serviço residual.",[15,582,584],{"id":583},"os-cinco-lock-ins-que-mais-doem-na-migracao","Os cinco lock-ins que mais doem na migração",[11,586,587],{},"Honestidade é importante: nem tudo migra fácil. Cinco coisas exigem trabalho extra e às vezes mudam a viabilidade do projeto:",[56,589,590,596,602,608,614],{},[59,591,592,595],{},[28,593,594],{},"DynamoDB com features específicas."," GSI, Streams, scan limits, TTL. Não há equivalente direto. O caminho realista é redesenhar pra Postgres com JSONB, ou pra um NoSQL self-hosted (FoundationDB, ScyllaDB) — re-arquitetura, não migração.",[59,597,598,601],{},[28,599,600],{},"Aurora-only features."," Aurora Serverless v2 com auto-scaling de connections, Aurora Global Database, Aurora I\u002FO optimized. Postgres self-hosted faz quase tudo, mas não tem o auto-scaling instantâneo. Pra workloads spiky, considere Neon (que oferece padrão similar).",[59,603,604,607],{},[28,605,606],{},"IAM cross-service complexo."," Times que usam IAM roles cross-account, Service Control Policies e organização hierárquica de contas têm controle de acesso embutido na arquitetura. Migrar exige reimplementar a hierarquia em outro lugar — Vault, Cloudflare Access, ou injeção de secrets do orquestrador. Conte dias, não horas.",[59,609,610,613],{},[28,611,612],{},"Lambda + EventBridge complexo."," Pipelines de eventos com vários hops, retries, dead letter queues. Não migra como está. Redesigne em torno de filas (RabbitMQ, NATS) e workers persistentes. Geralmente o sistema fica mais simples — mas leva tempo.",[59,615,616,619],{},[28,617,618],{},"S3 events disparando Lambda."," Padrão muito comum, e R2 com Cloudflare Workers cobre a maioria dos casos. Pra workloads que precisam de garantia exatamente-uma-vez ou ordering forte, troque pra padrão de fila — produtor escreve evento na fila quando arquivo é confirmado, worker consome.",[15,621,623],{"id":622},"a-conta-de-economia-sem-otimismo","A conta de economia, sem otimismo",[11,625,626],{},"Cenário típico de SaaS brasileiro com cinco aplicações:",[11,628,629],{},[28,630,631],{},"Antes na AWS:",[633,634,635,638,641,644,647,650,653,656,659,662,665],"ul",{},[59,636,637],{},"Cinco EC2 t3.medium: R$750",[59,639,640],{},"RDS db.t4g.large Multi-AZ: R$1.400",[59,642,643],{},"ElastiCache cache.t4g.micro: R$75",[59,645,646],{},"S3 com 100GB e egresso médio: R$300",[59,648,649],{},"ALB: R$110",[59,651,652],{},"CloudFront com volume médio: R$400",[59,654,655],{},"Route 53 + SES: R$75",[59,657,658],{},"CloudWatch logs\u002Fmétricas: R$250",[59,660,661],{},"Lambda com volume médio: R$200",[59,663,664],{},"NAT Gateway: R$200",[59,666,667],{},[28,668,669],{},"Total: R$3.760\u002Fmês = R$45.120\u002Fano",[11,671,672],{},[28,673,674],{},"Depois auto-hospedado:",[633,676,677,680,683,686,689,692,695,698,701],{},[59,678,679],{},"Quatro VPS Hetzner CPX21 com orquestrador: R$176",[59,681,682],{},"Postgres self-hosted (incluído nas VPS): R$0",[59,684,685],{},"Valkey (incluído): R$0",[59,687,688],{},"Cloudflare R2 50GB com egresso ilimitado: R$75",[59,690,691],{},"Cloudflare CDN + DNS: R$0",[59,693,694],{},"Resend pra email: R$100",[59,696,697],{},"Prometheus + Loki (incluído): R$0",[59,699,700],{},"Workers de fila (incluídos): R$0",[59,702,703],{},[28,704,705],{},"Total: R$351\u002Fmês = R$4.212\u002Fano",[11,707,708],{},"Economia: R$3.409\u002Fmês, R$40.908\u002Fano. Aproximadamente um mês de salário de engenheiro sênior.",[11,710,711],{},"A migração consome oitenta a cento e sessenta horas. Em horário de dev sênior interno, são entre dezesseis e trinta e dois mil reais. Retorno em cinco a dez meses, com economia perpétua depois.",[15,713,715],{"id":714},"a-migracao-mais-nao-obvia-secrets-e-credenciais","A migração mais não-óbvia: secrets e credenciais",[11,717,718],{},"Vale repetir, porque é o que mais surpreende time experiente em AWS. Na AWS você acessa S3 sem credentials no código — IAM role da EC2 resolve. Acessa RDS via IAM authentication. Acessa parameter store via IAM. O time perde a noção de que essa \"magia\" existe.",[11,720,721],{},"Fora da AWS, toda credencial é explícita. Aplicação precisa de:",[633,723,724,727,730,733,736],{},[59,725,726],{},"Access key e secret pra R2 (criada no painel Cloudflare)",[59,728,729],{},"Connection string com user e senha pro Postgres",[59,731,732],{},"URL do Valkey com senha",[59,734,735],{},"API key pra Resend",[59,737,738],{},"Token pra Cloudflare API se você automatiza DNS",[11,740,741],{},"A solução do orquestrador é declarar tudo isso como secrets injetados no contêiner como variáveis de ambiente. O secret é criptografado em repouso no orquestrador e nunca aparece nos logs. Pra rotação automática e auditoria sofisticada, Vault auto-hospedado entra na jogada — mas a maioria dos times não precisa.",[11,743,744],{},"Plano: faça uma planilha com todas as credenciais que cada app precisa, crie cada uma no provedor de destino, declare como secret no orquestrador, injeta no contêiner. Quatro a oito horas pra uma stack média.",[15,746,748],{"id":747},"quando-nao-migrar-perfis-honestos","Quando NÃO migrar (perfis honestos)",[11,750,751],{},"Quatro situações em que sair da AWS é decisão errada:",[11,753,754,757],{},[28,755,756],{},"Compliance que lista AWS nominalmente."," FedRAMP, ITAR, certos contratos de governo americano e algumas certificações financeiras exigem que a infra rode sobre componentes pré-aprovados — e a maioria das listas inclui AWS, GCP, Azure, e poucos provedores adicionais. Se o seu cliente é uma agência federal americana, AWS resolve uma fatia do compliance que custaria meses replicar em outro lugar.",[11,759,760,763],{},[28,761,762],{},"Time único focado em produto."," Se você é o único dev e está construindo o produto, oito semanas redirecionadas pra migração matam roadmap. Faça quando tiver o segundo dev, ou quando os custos AWS passarem a representar fatia significativa do MRR. Antes disso, AWS é caro mas comprável.",[11,765,766,769],{},[28,767,768],{},"Custos AWS abaixo de 2% do MRR."," Conta de mil reais mensais pra startup que fatura cem mil. A economia é real mas o esforço não vale o foco. Migre quando a fatura passar de cinco a dez por cento do MRR — aí o ganho cobre a oportunidade perdida.",[11,771,772,775],{},[28,773,774],{},"Lock-in profundo em DynamoDB ou Aurora Serverless v2."," Já tratado acima. Se metade da sua arquitetura é DynamoDB com Streams, você não migra — re-arquiteta. Esse é projeto diferente, com escopo diferente, decisão diferente.",[15,777,779],{"id":778},"estrategia-hibrida-alternativa-pra-quem-nao-quer-migrar-tudo","Estratégia híbrida — alternativa pra quem não quer migrar tudo",[11,781,782],{},"Times com cinquenta ou mais aplicações em AWS raramente migram em bloco. A estratégia híbrida funciona melhor:",[633,784,785,788,791,794],{},[59,786,787],{},"Mantém em AWS o que é caro de mover (Aurora com features específicas, Lambda crítica, DynamoDB)",[59,789,790],{},"Move o que é barato de mover e caro de manter (S3 → R2, CloudFront → Cloudflare, EC2 não-críticas → VPS)",[59,792,793],{},"Estabelece VPN ou conexão privada entre as duas pontas",[59,795,796],{},"Economia parcial mas zero risco de migração radical",[11,798,799],{},"Resultado típico: corte de quarenta a sessenta por cento da fatura AWS, sem mexer nas peças críticas. Pra empresa que paga cinquenta mil mensais, isso é vinte a trinta mil de volta — e o restante migra organicamente nos doze meses seguintes, conforme times reescrevem componentes por outras razões.",[15,801,803],{"id":802},"heroctl-como-destino-o-que-muda-na-pratica","HeroCtl como destino — o que muda na prática",[11,805,806],{},"HeroCtl é orquestrador de contêineres que roda em qualquer servidor Linux com Docker. Quatro VPS rodando HeroCtl entregam experiência operacional próxima do que você teria com ECS gerenciado — sem cobrança gerenciada, sem lock-in.",[11,808,809],{},"O que substitui:",[633,811,812,817,823,829],{},[59,813,814,816],{},[28,815,239],{}," vira o roteador integrado do HeroCtl, com TLS Let's Encrypt automático",[59,818,819,822],{},[28,820,821],{},"CloudWatch parcial"," vira métricas embutidas e logs centralizados nativos",[59,824,825,828],{},[28,826,827],{},"RDS automated backups"," vira backup gerenciado no Business Edition",[59,830,831,834],{},[28,832,833],{},"IAM roles em apps"," vira injeção de secrets no manifesto de job",[11,836,837],{},"O que continua igual: Docker rodando seu app exatamente como roda em ECS. Variáveis de ambiente, healthchecks, rolling deploys, multi-replicas. A aplicação não percebe a diferença.",[11,839,840,841,844,845,848,849,852],{},"Há três planos. ",[28,842,843],{},"Community"," é gratuito permanente, sem limite de servidores ou jobs — roda toda a stack descrita acima incluindo alta disponibilidade real, roteador, certificados, métricas e logs. ",[28,846,847],{},"Business"," adiciona SSO, RBAC granular, auditoria detalhada, backup gerenciado e suporte com SLA — útil pra quem já tem requisitos formais de plataforma. ",[28,850,851],{},"Enterprise"," adiciona escrow de código-fonte, suporte 24×7 e desenvolvimento dedicado. Os preços de Business e Enterprise estão publicados na página de planos, sem \"fale com vendas\" obrigatório.",[11,854,855],{},"O cluster público de demonstração roda em quatro servidores e a eleição de coordenador acontece em cerca de sete segundos quando o nó atual cai — número medido, não estimado.",[11,857,34],{},[15,859,861],{"id":860},"perguntas-que-a-gente-recebe-sobre-saida-da-aws","Perguntas que a gente recebe sobre saída da AWS",[358,863,865],{"id":864},"quanto-tempo-realmente-leva-migrar-uma-stack-media","Quanto tempo realmente leva migrar uma stack média?",[11,867,868],{},"Pra startup com cinco a dez aplicações, sem lock-ins profundos: seis a oito semanas com um dev sênior dedicando meio tempo, ou três a quatro semanas com dedicação total. Stacks maiores ou com Lambdas event-driven complexas: três a quatro meses. Stacks com DynamoDB ou Aurora Serverless v2 críticos: vire projeto de re-arquitetura, prazo de seis meses ou mais.",[358,870,872],{"id":871},"dynamodb-tem-alternativa-boa","DynamoDB tem alternativa boa?",[11,874,875],{},"Não há substituto idêntico. As opções honestas são: Postgres com JSONB pra a maioria dos casos (resolve oitenta por cento dos usos de DynamoDB com performance excelente), ScyllaDB ou Cassandra self-hosted pra workloads que realmente precisam de NoSQL distribuído, FoundationDB pra quem precisa de transações distribuídas. Nenhum desses é \"mude a connection string e pronto\" — exigem mudança no modelo de dados.",[358,877,879],{"id":878},"posso-manter-aws-pro-banco-e-mover-compute","Posso manter AWS pro banco e mover compute?",[11,881,882],{},"Sim, e é a estratégia híbrida mais comum. Aurora ou RDS continua na AWS, EC2 viram VPS Hetzner ou DigitalOcean, S3 vira R2. Você abre VPN entre as duas pontas e o app continua acessando RDS via endpoint privado. Economia tipicamente de cinquenta a setenta por cento da fatura AWS.",[358,884,886],{"id":885},"s3-r2-quanto-custa-transferir-1tb","S3 → R2: quanto custa transferir 1TB?",[11,888,889,890,892],{},"R2 cobra zero de ingresso. AWS cobra a saída de S3 — aproximadamente nove centavos de dólar por GB nos primeiros 10 TB. Um terabyte custa cerca de noventa dólares pra sair da AWS, R$450. Tempo de transferência: doze a vinte e quatro horas com ",[376,891,549],{}," paralelizado, dependendo da banda. Após a migração, R$75 mensais armazenando 50GB com egresso ilimitado, contra R$600 pelo mesmo no S3 com tráfego ativo.",[358,894,896],{"id":895},"lambda-como-migrar-event-driven","Lambda — como migrar event-driven?",[11,898,899,900,903,904,907,908,911,912,915],{},"Depende do disparador. ",[28,901,902],{},"S3 disparando Lambda"," vira R2 com Cloudflare Workers (mesmo padrão, sem mudança radical). ",[28,905,906],{},"SQS disparando Lambda"," vira worker persistente no app server, consumindo da fila — geralmente código mais simples que a Lambda original. ",[28,909,910],{},"EventBridge agendado"," vira cron no orquestrador. ",[28,913,914],{},"EventBridge com regras complexas e Step Functions encadeados"," exige redesign — desenhe o fluxo em torno de uma fila central com workers consumidores, fica mais auditável.",[358,917,919],{"id":918},"rds-multi-az-postgres-self-hosted-e-confiavel","RDS Multi-AZ → Postgres self-hosted é confiável?",[11,921,922],{},"Postgres com replicação física streaming e failover via Patroni atinge confiabilidade próxima do RDS Multi-AZ — desde que o time saiba operar. Se ninguém na equipe domina Postgres em produção, o caminho mais seguro é Neon ou Supabase, que entregam Postgres gerenciado com tier gratuito. Pra times com SRE ou DBA, self-hosted é viável e economiza substancial. Pra times sem essa competência, a economia não compensa o risco — pague pelo gerenciado.",[358,924,926],{"id":925},"email-ses-quem-e-mais-barato","Email SES → quem é mais barato?",[11,928,929],{},"Depende do volume. Até 10 mil emails mensais, Postmark a US$15 entrega muito mais (entregabilidade superior, dashboard melhor, suporte responsivo). Entre 50 mil e 100 mil mensais, Resend a US$20 é o melhor custo-benefício. Acima de 500 mil mensais, Mailgun ou Amazon SES competem em preço — e SES talvez faça sentido manter mesmo após migrar o resto. Email é dos poucos serviços AWS que pode ser racional manter.",[358,931,933],{"id":932},"dns-tudo-cloudflare-ou-misturar","DNS — tudo Cloudflare ou misturar?",[11,935,936],{},"Cloudflare resolve DNS, CDN, DDoS, WAF e workers no plano grátis. Pra a maioria das stacks, concentrar tudo lá simplifica operação e corta custo. A exceção é compliance que exige separação geográfica de provedor — alguns frameworks de governança pedem que DNS e CDN sejam de fornecedores distintos. Nesse caso, Cloudflare DNS + Bunny CDN (ou Fastly) cumpre a separação.",[358,938,940],{"id":939},"compliance-lgpd-muda-algo","Compliance LGPD muda algo?",[11,942,943],{},"LGPD não exige hospedagem em território brasileiro. Exige que você saiba onde os dados estão e que tenha contrato adequado com o operador. Hetzner (Alemanha), DigitalOcean (várias regiões), Cloudflare R2 (multi-região) e Magalu Cloud (Brasil) são todos compatíveis com LGPD desde que o contrato esteja em ordem. Pra quem prefere dado em território nacional por preferência de cliente, Magalu Cloud é a alternativa direta.",[11,945,34],{},[15,947,949],{"id":948},"proximo-passo-concreto","Próximo passo concreto",[11,951,952],{},"Se você chegou até aqui, o próximo passo é a planilha. Lista os doze serviços, marca quais sua stack usa, anota custo atual de cada um, escolhe alternativa. Em uma tarde você sabe se a migração vale o esforço.",[11,954,955],{},"Quando estiver pronto pra provisionar o destino:",[957,958,963],"pre",{"className":959,"code":960,"language":961,"meta":962,"style":962},"language-bash shiki shiki-themes github-dark-default","curl -sSL get.heroctl.com\u002Finstall.sh | sh\n","bash","",[376,964,965],{"__ignoreMap":962},[966,967,970,974,978,982,986],"span",{"class":968,"line":969},"line",1,[966,971,973],{"class":972},"sQhOw","curl",[966,975,977],{"class":976},"sFSAA"," -sSL",[966,979,981],{"class":980},"s9uIt"," get.heroctl.com\u002Finstall.sh",[966,983,985],{"class":984},"suJrU"," |",[966,987,988],{"class":972}," sh\n",[11,990,991],{},"Roda em qualquer servidor Linux com Docker. Os primeiros três viram quórum pro plano de controle replicado. Você submete jobs via CLI, API ou painel web embutido. O cluster decide onde rodar, faz health check, gerencia rolling deploys, emite certificados Let's Encrypt automaticamente.",[11,993,994,995,1000,1001,1005],{},"Pra contexto adicional sobre custos e arquitetura, leia também ",[996,997,999],"a",{"href":998},"\u002Fblog\u002Faws-ecs-vs-kubernetes-vs-auto-hospedado","AWS ECS vs Kubernetes vs auto-hospedado"," e ",[996,1002,1004],{"href":1003},"\u002Fblog\u002Fquanto-custa-hospedar-saas-brasileiro-2026","Quanto custa hospedar SaaS brasileiro em 2026",".",[11,1007,1008],{},"A migração é mais aborrecida do que difícil. O difícil é decidir começar.",[1010,1011,1012],"style",{},"html pre.shiki code .sQhOw, html code.shiki .sQhOw{--shiki-default:#FFA657}html pre.shiki code .sFSAA, html code.shiki .sFSAA{--shiki-default:#79C0FF}html pre.shiki code .s9uIt, html code.shiki .s9uIt{--shiki-default:#A5D6FF}html pre.shiki code .suJrU, html code.shiki .suJrU{--shiki-default:#FF7B72}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":962,"searchDepth":1014,"depth":1014,"links":1015},2,[1016,1017,1018,1019,1034,1035,1036,1037,1038,1039,1040,1041,1052],{"id":17,"depth":1014,"text":18},{"id":37,"depth":1014,"text":38},{"id":50,"depth":1014,"text":51},{"id":136,"depth":1014,"text":137,"children":1020},[1021,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033],{"id":360,"depth":1022,"text":361},3,{"id":370,"depth":1022,"text":371},{"id":394,"depth":1022,"text":395},{"id":404,"depth":1022,"text":405},{"id":421,"depth":1022,"text":422},{"id":431,"depth":1022,"text":432},{"id":441,"depth":1022,"text":442},{"id":448,"depth":1022,"text":449},{"id":458,"depth":1022,"text":459},{"id":471,"depth":1022,"text":472},{"id":492,"depth":1022,"text":493},{"id":502,"depth":1022,"text":503},{"id":524,"depth":1014,"text":525},{"id":583,"depth":1014,"text":584},{"id":622,"depth":1014,"text":623},{"id":714,"depth":1014,"text":715},{"id":747,"depth":1014,"text":748},{"id":778,"depth":1014,"text":779},{"id":802,"depth":1014,"text":803},{"id":860,"depth":1014,"text":861,"children":1042},[1043,1044,1045,1046,1047,1048,1049,1050,1051],{"id":864,"depth":1022,"text":865},{"id":871,"depth":1022,"text":872},{"id":878,"depth":1022,"text":879},{"id":885,"depth":1022,"text":886},{"id":895,"depth":1022,"text":896},{"id":918,"depth":1022,"text":919},{"id":925,"depth":1022,"text":926},{"id":932,"depth":1022,"text":933},{"id":939,"depth":1022,"text":940},{"id":948,"depth":1014,"text":949},"caso-de-uso",null,"2026-05-26","Migrar de AWS pra cloud mais barato (Hetzner\u002FDO) ou auto-hospedado parece projeto de 1 ano. Na prática, dá pra fazer em 6-8 semanas se você mapear os 12 serviços AWS-only que sua stack usa de verdade.",false,"md",{},true,"\u002Fblog\u002Fcomo-sair-da-aws-sem-reescrever-toda-stack","16 min",{"title":5,"description":1056},{"loc":1061},"blog\u002Fcomo-sair-da-aws-sem-reescrever-toda-stack",[1067,1068,1069,1070,1071],"aws","migracao","custo","saida","guia","kqR2CUbhazjyN_A9HwRFTWxS_-3H7sNRPr0KAS0KlYw",[1074,1081],{"title":1075,"path":1076,"stem":1077,"description":1078,"date":1079,"category":1080,"children":-1},"Cloudflare na frente do cluster auto-hospedado: vale a pena em 2026?","\u002Fblog\u002Fcloudflare-na-frente-cluster-auto-hospedado-vale-pena","blog\u002Fcloudflare-na-frente-cluster-auto-hospedado-vale-pena","Cloudflare grátis bloqueia DDoS, cacha estático e esconde IP do servidor. Mas adiciona latência, lock-in e features que talvez você não use. Quando vale e quando é overkill.","2026-05-08","engenharia",{"title":1082,"path":1083,"stem":1084,"description":1085,"date":1086,"category":1080,"children":-1},"Deploy de Docker em produção: do compose ao cluster com alta disponibilidade","\u002Fblog\u002Fdeploy-docker-producao-do-compose-ao-cluster","blog\u002Fdeploy-docker-producao-do-compose-ao-cluster","Docker Compose resolve o dev. Em produção basta até um servidor sem SLA. Acima disso, você precisa de cluster real. Trajetória honesta dos quatro estágios de maturidade.","2026-04-21",{"path":1088},"\u002Fen\u002Fblog\u002Fleaving-aws-without-rewriting-the-stack",1777362184686]