<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Felipe Duque</title>
    <description>The latest articles on DEV Community by Felipe Duque (@duquedotdev).</description>
    <link>https://dev.to/duquedotdev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F287111%2F37f5ee03-4c3a-48a5-aaf2-1d4f0aa70f48.jpeg</url>
      <title>DEV Community: Felipe Duque</title>
      <link>https://dev.to/duquedotdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/duquedotdev"/>
    <language>en</language>
    <item>
      <title>EC2: A Espinha Dorsal da AWS (e Onde Todo Mundo Erra)</title>
      <dc:creator>Felipe Duque</dc:creator>
      <pubDate>Tue, 07 Jul 2026 23:47:21 +0000</pubDate>
      <link>https://dev.to/duquedotdev/ec2-a-espinha-dorsal-da-aws-e-onde-todo-mundo-erra-4cnj</link>
      <guid>https://dev.to/duquedotdev/ec2-a-espinha-dorsal-da-aws-e-onde-todo-mundo-erra-4cnj</guid>
      <description>&lt;p&gt;Lembro a primeira instância EC2 que subi. &lt;code&gt;t2.micro&lt;/code&gt;, free tier, orgulho desproporcional ao tamanho da máquina. Terminei o tutorial, fechei o notebook, e esqueci ela ligada. Voltei três meses depois. Não tinha feito nada de útil naquele tempo todo — só ficou lá, rodando sozinha, sem propósito, virando linha na fatura que eu nem sabia que existia.&lt;/p&gt;

&lt;p&gt;Foi minha primeira lição de verdade sobre EC2, e ainda é a mais repetida entre quem começa: instância esquecida é a forma mais boba de gastar dinheiro em nuvem. Se já aconteceu com você, bem-vindo ao clube. Se ainda não aconteceu, é questão de tempo.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é o EC2, afinal
&lt;/h2&gt;

&lt;p&gt;EC2 (Elastic Compute Cloud) é o serviço de servidor virtual da AWS. Você não compra hardware, não instala nada fisicamente, só aluga capacidade de processamento — CPU, memória, rede, e opcionalmente disco — por hora ou por segundo, dependendo do tipo de instância e da forma de pagamento escolhida.&lt;/p&gt;

&lt;p&gt;Toda instância nasce de uma AMI (Amazon Machine Image): sistema operacional, pacotes pré-instalados, configuração inicial, tudo empacotado. Você escolhe uma AMI da própria AWS, do Marketplace, ou uma sua, customizada e salva a partir de uma instância que você já ajustou do seu jeito.&lt;/p&gt;

&lt;p&gt;Uma vez no ar, a instância é sua até você decidir parar (stop), terminar (terminate), ou — like eu, ano passado — deixar rodando pra sempre sem perceber.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instance Types
&lt;/h2&gt;

&lt;p&gt;O nome de uma instância parece código de nave espacial, mas segue uma lógica simples. Pega &lt;code&gt;m6i.xlarge&lt;/code&gt;: &lt;code&gt;m&lt;/code&gt; é a família, &lt;code&gt;6&lt;/code&gt; é a geração, &lt;code&gt;i&lt;/code&gt; indica o tipo de processador (Intel, nesse caso), e &lt;code&gt;xlarge&lt;/code&gt; é o tamanho.&lt;/p&gt;

&lt;p&gt;As famílias existem porque workload nenhum é igual ao outro, e usar a errada é queimar dinheiro pagando por recurso que sua aplicação nunca vai usar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Uso geral (T, M)&lt;/strong&gt; — o equilíbrio entre CPU e memória. A família &lt;code&gt;T&lt;/code&gt; é &lt;em&gt;burstable&lt;/em&gt; (chegamos nos créditos de CPU já já), boa pra carga variável e ambiente de dev/teste. A família &lt;code&gt;M&lt;/code&gt; é o "meio-termo" sério, boa pra maioria das aplicações web e microsserviços sem gargalo específico.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Otimizada pra computação (C)&lt;/strong&gt; — proporção alta de CPU por memória. Processamento em lote, encoding de vídeo, modelagem científica, servidor de jogos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Otimizada pra memória (R, X, High Memory)&lt;/strong&gt; — quando o gargalo é RAM, não CPU. Banco de dados in-memory, cache distribuído, processamento analítico de big data. A família &lt;code&gt;X&lt;/code&gt; chega a terabytes de RAM, pra workload tipo SAP HANA.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Otimizada pra armazenamento (I, D, H)&lt;/strong&gt; — disco local NVMe rapidíssimo, físico, na própria máquina. Banco de dados transacional de alta performance, data warehouse, processamento distribuído tipo Hadoop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Computação acelerada (P, G, Inf, Trn, F1)&lt;/strong&gt; — GPU ou chip dedicado. &lt;code&gt;P&lt;/code&gt; e &lt;code&gt;Trn&lt;/code&gt; pra treinar modelo de machine learning, &lt;code&gt;G&lt;/code&gt; pra inferência e workload gráfico, &lt;code&gt;Inf&lt;/code&gt; pra inferência otimizada em custo, &lt;code&gt;F1&lt;/code&gt; pra FPGA.&lt;/p&gt;

&lt;p&gt;Ainda tem o sufixo &lt;code&gt;a&lt;/code&gt; (AMD) e &lt;code&gt;g&lt;/code&gt; (Graviton, o processador ARM da própria AWS). Instância Graviton costuma sair de 20 a 40% mais barata pra performance equivalente, mas exige compatibilidade com ARM — hoje a maioria das linguagens e frameworks modernos aguenta numa boa, mas vale testar antes de jogar produção inteira de uma vez.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tips 'n Tricks:&lt;/strong&gt; não escolha instância "no olho". Rode o CloudWatch por uma semana no ambiente atual (ou no de teste), olhe utilização real de CPU e memória, e só depois decida a família. "Achismo" de sizing é a razão de metade das contas de AWS estarem infladas por aí.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  CPU Credits
&lt;/h2&gt;

&lt;p&gt;Esse aqui é o item que mais gente ignora até tomar um susto em produção. As instâncias da família &lt;code&gt;T&lt;/code&gt; (T3, T3a, T4g) são &lt;em&gt;burstable&lt;/em&gt;: têm uma performance base garantida — geralmente uma fração do vCPU completo — e acumulam crédito quando estão usando menos CPU do que essa base. Quando a demanda sobe, a instância gasta esses créditos (em um peido) pra rodar acima do baseline, por um tempo.&lt;/p&gt;

&lt;p&gt;E aí o que acontece quando o saldo zera? Depende do modo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Standard:&lt;/strong&gt; a instância volta a ser limitada à performance base. Sua aplicação simplesmente fica lenta, sem aviso bonito, só devagar mesmo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unlimited&lt;/strong&gt; (padrão em T3/T3a/T4g): a instância continua rodando acima do baseline, e você paga uma tarifa extra por vCPU-hora usado além do crédito acumulado.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sugestão:&lt;/strong&gt; T-family é ótima pra ambiente de desenvolvimento, teste, ou aplicação com pico esporádico. Pra workload sustentado em alta CPU o tempo inteiro, você paga o pior dos dois mundos — ou throttle, ou sobretaxa. Nesse caso, migre pra M's ou C's Family.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F52u3erzhfzv9zjcezjkv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F52u3erzhfzv9zjcezjkv.png" alt=" " width="799" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Storage / Volumes
&lt;/h2&gt;

&lt;p&gt;Brother, a coisa mais louca pra mim foi o dia que descobri que um disco na AWS, na real, não é um disco físico dentro de um servidor, mas sim um servidor de storage inteiro, disponibilizado na rede interna da AWS, que você &lt;em&gt;attach&lt;/em&gt; no seu EC2. Isso é louco demais!&lt;/p&gt;

&lt;p&gt;Vamos além da configuração básica que já vem no "click-ops"?&lt;/p&gt;

&lt;p&gt;Instância EC2 sozinha não guarda nada de forma confiável — pra isso existe uma família inteira de serviços de armazenamento na AWS, cada um resolvendo um problema diferente. Confundir um com o outro é comum, principalmente entre quem está começando.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EBS (Elastic Block Store)&lt;/strong&gt; — o disco que você anexa a uma instância, como um HD virtual. É a opção padrão pra boot volume e pra qualquer coisa que precise de acesso em nível de bloco, baixa latência, um disco por instância (com raras exceções de multi-attach). Dentro do EBS, a escolha do tipo de volume muda conforme a utilidade: &lt;code&gt;gp3&lt;/code&gt; serve pro dia a dia, é a opção padrão pra quase tudo; &lt;code&gt;io1&lt;/code&gt;/&lt;code&gt;io2&lt;/code&gt; entra quando você tem um banco de dados crítico que não pode tolerar variação de performance; &lt;code&gt;st1&lt;/code&gt; é pra quando o gargalo é volume de dado sequencial grande, tipo processamento de log ou big data; &lt;code&gt;sc1&lt;/code&gt; é o armazenamento de bloco mais barato, pra dado que quase ninguém acessa mas precisa continuar existindo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instance Store&lt;/strong&gt; — disco físico, colado na própria máquina que hospeda sua instância. Serve como scratch space ou cache: rápido igual raio, mas efêmero — se a instância para, os dados somem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EFS (Elastic File System)&lt;/strong&gt; — sistema de arquivos de rede (NFS), acessível por várias instâncias EC2 ao mesmo tempo. Exemplo clássico: um cluster de servidores WordPress (alguém usa ainda hoje?) atrás de um load balancer, todos precisando enxergar a mesma pasta de uploads de mídia. Ou um ambiente de renderização onde múltiplas máquinas precisam compartilhar o mesmo diretório de projeto. A lógica aqui é poder usar o mesmo disco por mais de uma instância, mesmo em zonas diferentes. Em teoria, EBS io1, io2 e Block Express também podem, mas só na mesma zona — não servem a esse propósito.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FSx&lt;/strong&gt; — sistemas de arquivo gerenciados, cada variante compatível com um motor específico:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FSx for Windows File Server&lt;/strong&gt; — SMB e integração com Active Directory. Exemplo: migrar uma aplicação Windows legada que depende de compartilhamento de rede corporativo, sem reescrever nada.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FSx for Lustre&lt;/strong&gt; — throughput altíssimo, feito pra HPC. Exemplo: treinar modelo de machine learning lendo dataset gigante direto do S3 em paralelo, ou processamento genômico.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FSx for NetApp ONTAP&lt;/strong&gt; — pra quem já usa NetApp on-premises e quer migrar pra nuvem sem perder recursos como snapshot e clonagem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FSx for OpenZFS&lt;/strong&gt; — mesma lógica, pra quem depende de recursos específicos do ZFS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Keypairs
&lt;/h2&gt;

&lt;p&gt;Toda instância Linux nasce sem senha, só com um par de chaves: a pública fica instalada na instância (&lt;code&gt;~/.ssh/authorized_keys&lt;/code&gt;), a privada (o arquivo &lt;code&gt;.pem&lt;/code&gt;) é baixada por você uma única vez, na criação. A AWS não guarda cópia da privada. Perdeu o &lt;code&gt;.pem&lt;/code&gt;? Perdeu o acesso direto — tem workaround, mas nenhum é rápido nem elegante. (Sinceramente, aí foi mlk em!?)&lt;/p&gt;

&lt;p&gt;Em instância Windows, a mesma chave privada descriptografa a senha de administrador, no lugar do SSH.&lt;/p&gt;

&lt;p&gt;SSH com keypair aberto na internet (porta 22 liberada pro mundo) é uma das formas mais comuns de instância comprometida virar minerador de criptomoeda por conta alheia — chegamos nesse caso real mais adiante.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sugestão:&lt;/strong&gt; prefira EC2 Instance Connect (SSH via navegador, chave temporária) ou, melhor ainda, AWS Systems Manager Session Manager, que dá acesso ao shell sem abrir porta 22, com controle via IAM e log completo no CloudTrail.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Elastic IP
&lt;/h2&gt;

&lt;p&gt;Toda instância recebe um IP público dinâmico, que muda toda vez que você para e sobe a instância de novo. O Elastic IP resolve isso: é um IPv4 público fixo, associado à sua conta (não à instância), remapeável pra outra instância quando quiser — útil pra failover manual.&lt;/p&gt;

&lt;p&gt;Desde 2024 a AWS cobra por hora todo endereço IPv4 público, associado ou não — antes só cobrava o Elastic IP ocioso. IP público hoje tem custo sempre, e Elastic IP parado é dinheiro escorrendo silenciosamente.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sugestão:&lt;/strong&gt; libere Elastic IP que não está mais em uso. Item clássico de "gordura" em fatura de conta antiga.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  User Data Scripts
&lt;/h2&gt;

&lt;p&gt;User Data é um script (geralmente bash, via cloud-init) colado na criação da instância, que roda automaticamente, como root, na primeira inicialização. Instala pacote, configura serviço, registra a instância — sem precisar entrar manualmente depois.&lt;/p&gt;

&lt;p&gt;Fica acessível de dentro da instância via metadata: &lt;code&gt;http://169.254.169.254/latest/user-data&lt;/code&gt;. E aqui mora um detalhe que muita gente esquece: nunca coloque segredo (senha, chave de API, token) direto no user data em texto plano. Qualquer processo com acesso à instância consegue ler o metadata.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sugestão:&lt;/strong&gt; use user data só pra bootstrap. Segredo de verdade fica no Secrets Manager, buscado em runtime, nunca hardcoded no script.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vale mencionar o IMDSv2: exige token de sessão pra cada requisição, ao invés do IMDSv1, que respondia sem autenticação. Fecha uma classe inteira de ataque via SSRF. Se sua instância ainda está com IMDSv1 habilitado, esse é o próximo item da sua lista.&lt;/p&gt;

&lt;h2&gt;
  
  
  Purchasing Options
&lt;/h2&gt;

&lt;p&gt;Aqui é onde a conta da AWS realmente é decidida — a mesma instância pode custar 3x, 5x, até 10x diferente dependendo de como você compra.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;On-Demand&lt;/strong&gt; — sem compromisso, paga por segundo/hora. O mais caro, o mais flexível.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reserved Instances (RI)&lt;/strong&gt; — compromisso de 1 ou 3 anos, desconto de até 60%. Standard (atributos fixos, maior desconto) ou Convertible (pode trocar de família, desconto menor).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Savings Plans&lt;/strong&gt; — sucessor mais flexível do RI. Compromisso de gasto por hora, não de instância específica. Compute Savings Plans valem pra qualquer família/região/serviço; EC2 Instance Savings Plans são mais restritos, com desconto maior.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spot Instances&lt;/strong&gt; — capacidade ociosa da AWS, desconto de até 90%. A AWS pode retomar com 2 minutos de aviso. Ideal pra workload tolerante a falha — batch, renderização, CI/CD.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dedicated Hosts&lt;/strong&gt; — servidor físico dedicado, com visibilidade de socket e núcleo. Existe por licenciamento (BYOL) ou compliance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dedicated Instances&lt;/strong&gt; — hardware dedicado, sem a visibilidade e controle de posicionamento do Dedicated Host.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Capacity Reservations&lt;/strong&gt; — reserva capacidade garantida numa zona de disponibilidade, sem compromisso de longo prazo.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sugestão:&lt;/strong&gt; a estratégia madura raramente usa uma opção só. Baseline previsível vai de Savings Plans, pico sazonal vai de On-Demand, workload tolerante a interrupção vai de Spot.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Algumas Dicas Extras
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Sempre marque "delete on termination" com intenção, não por padrão.&lt;/li&gt;
&lt;li&gt;Tag em tudo. Instância sem tag de dono/projeto é a razão pela qual ninguém sabe se pode desligar aquele &lt;code&gt;t2.large&lt;/code&gt; rodando desde 2022.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;REVISE SUAS SECURITY GROUPS ANTES DE DORMIR!&lt;/strong&gt; Porta 22 ou 3389 aberta pra &lt;code&gt;0.0.0.0/0&lt;/code&gt; é convite formal pra bot de scan automatizado.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Caso Real
&lt;/h2&gt;

&lt;p&gt;Em fevereiro de 2018, a empresa de segurança RedLock descobriu que o ambiente de nuvem da Tesla havia sido comprometido. O console de administração de um cluster Kubernetes rodando sobre a infraestrutura AWS da empresa estava exposto na internet, sem senha. Um invasor usou esse acesso pra chegar nas credenciais da conta AWS da Tesla, e a partir daí, subiu instâncias e rodou software de mineração de criptomoeda usando a capacidade computacional (e o cartão de crédito) da própria Tesla.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Não foi uma falha sofisticada. Foi um painel de administração exposto, sem autenticação, dando de bandeja acesso a recursos de computação que qualquer um podia ligar e desligar à vontade.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Acontece com mais frequência do que se imagina, geralmente em escala bem menor: instância pequena, esquecida, com SSH aberto pro mundo, vira minerador em questão de horas, e o dono só descobre quando a fatura chega com quatro dígitos a mais.&lt;/p&gt;

&lt;h2&gt;
  
  
  Receita de bolo de banana
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="c1"&gt;# --------------------------------------------------------------&lt;/span&gt;
&lt;span class="c1"&gt;# EC2 "specialist-grade" — instância de produção&lt;/span&gt;
&lt;span class="c1"&gt;# --------------------------------------------------------------&lt;/span&gt;

&lt;span class="c1"&gt;# AMI sempre atualizada via SSM Parameter, nunca hardcoded&lt;/span&gt;
&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="s2"&gt;"aws_ssm_parameter"&lt;/span&gt; &lt;span class="s2"&gt;"al2023_ami"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Acesso via SSM Session Manager, não via SSH/keypair&lt;/span&gt;
&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"aws_iam_role"&lt;/span&gt; &lt;span class="s2"&gt;"ec2_ssm_role"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"ec2-ssm-role"&lt;/span&gt;

  &lt;span class="nx"&gt;assume_role_policy&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;jsonencode&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="nx"&gt;Version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;
    &lt;span class="nx"&gt;Statement&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
      &lt;span class="nx"&gt;Action&lt;/span&gt;    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"sts:AssumeRole"&lt;/span&gt;
      &lt;span class="nx"&gt;Effect&lt;/span&gt;    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Allow"&lt;/span&gt;
      &lt;span class="nx"&gt;Principal&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Service&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"ec2.amazonaws.com"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}]&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"aws_iam_role_policy_attachment"&lt;/span&gt; &lt;span class="s2"&gt;"ssm_managed"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;role&lt;/span&gt;       &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;aws_iam_role&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ec2_ssm_role&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;
  &lt;span class="nx"&gt;policy_arn&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"aws_iam_instance_profile"&lt;/span&gt; &lt;span class="s2"&gt;"ec2_profile"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"ec2-ssm-instance-profile"&lt;/span&gt;
  &lt;span class="nx"&gt;role&lt;/span&gt;  &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;aws_iam_role&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ec2_ssm_role&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Sem regra de ingress SSH aberta pro mundo&lt;/span&gt;
&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"aws_security_group"&lt;/span&gt; &lt;span class="s2"&gt;"app_sg"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;name&lt;/span&gt;        &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"app-sg"&lt;/span&gt;
  &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Sem SSH/RDP exposto - acesso via SSM"&lt;/span&gt;
  &lt;span class="nx"&gt;vpc_id&lt;/span&gt;      &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vpc_id&lt;/span&gt;

  &lt;span class="nx"&gt;egress&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;from_port&lt;/span&gt;   &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nx"&gt;to_port&lt;/span&gt;     &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="nx"&gt;protocol&lt;/span&gt;    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"-1"&lt;/span&gt;
    &lt;span class="nx"&gt;cidr_blocks&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"0.0.0.0/0"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;ingress&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;description&lt;/span&gt;     &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"HTTPS apenas via Load Balancer"&lt;/span&gt;
    &lt;span class="nx"&gt;from_port&lt;/span&gt;       &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt;
    &lt;span class="nx"&gt;to_port&lt;/span&gt;         &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt;
    &lt;span class="nx"&gt;protocol&lt;/span&gt;        &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"tcp"&lt;/span&gt;
    &lt;span class="nx"&gt;security_groups&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;alb_security_group_id&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;tags&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"app-sg"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"aws_instance"&lt;/span&gt; &lt;span class="s2"&gt;"app"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;ami&lt;/span&gt;                    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aws_ssm_parameter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;al2023_ami&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;
  &lt;span class="nx"&gt;instance_type&lt;/span&gt;          &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"t3.medium"&lt;/span&gt;
  &lt;span class="nx"&gt;subnet_id&lt;/span&gt;              &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;private_subnet_id&lt;/span&gt;
  &lt;span class="nx"&gt;vpc_security_group_ids&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;aws_security_group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;app_sg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="nx"&gt;iam_instance_profile&lt;/span&gt;   &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;aws_iam_instance_profile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ec2_profile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;

  &lt;span class="c1"&gt;# key_name omitido de propósito -- acesso via SSM, não SSH direto&lt;/span&gt;

  &lt;span class="c1"&gt;# Modo unlimited -- evita throttle silencioso em pico de carga&lt;/span&gt;
  &lt;span class="nx"&gt;credit_specification&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;cpu_credits&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"unlimited"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;# IMDSv2 obrigatório -- fecha a classe de ataque via SSRF&lt;/span&gt;
  &lt;span class="nx"&gt;metadata_options&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;http_endpoint&lt;/span&gt;               &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"enabled"&lt;/span&gt;
    &lt;span class="nx"&gt;http_tokens&lt;/span&gt;                 &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"required"&lt;/span&gt;
    &lt;span class="nx"&gt;http_put_response_hop_limit&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;root_block_device&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;volume_type&lt;/span&gt;            &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"gp3"&lt;/span&gt;
    &lt;span class="nx"&gt;volume_size&lt;/span&gt;             &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;
    &lt;span class="nx"&gt;iops&lt;/span&gt;                     &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;
    &lt;span class="nx"&gt;throughput&lt;/span&gt;               &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;125&lt;/span&gt;
    &lt;span class="nx"&gt;encrypted&lt;/span&gt;                &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="nx"&gt;kms_key_id&lt;/span&gt;               &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kms_key_arn&lt;/span&gt;
    &lt;span class="nx"&gt;delete_on_termination&lt;/span&gt;    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;

    &lt;span class="nx"&gt;tags&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"app-root-volume"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;monitoring&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="c1"&gt;# CloudWatch detailed monitoring, granularidade de 1 min&lt;/span&gt;

  &lt;span class="nx"&gt;user_data&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;base64encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;templatefile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"${path.module}/templates/bootstrap.sh.tpl"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;environment&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;
    &lt;span class="nx"&gt;app_version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;app_version&lt;/span&gt;
  &lt;span class="p"&gt;}))&lt;/span&gt;

  &lt;span class="nx"&gt;user_data_replace_on_change&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="c1"&gt;# força recriação se o script de bootstrap mudar&lt;/span&gt;

  &lt;span class="nx"&gt;tags&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;Name&lt;/span&gt;        &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"app-${var.environment}"&lt;/span&gt;
    &lt;span class="nx"&gt;Environment&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;environment&lt;/span&gt;
    &lt;span class="nx"&gt;Owner&lt;/span&gt;       &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"platform-team"&lt;/span&gt;
    &lt;span class="nx"&gt;ManagedBy&lt;/span&gt;   &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"terraform"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;lifecycle&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;create_before_destroy&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="nx"&gt;ignore_changes&lt;/span&gt;        &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;ami&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;# evita replace acidental por AMI nova sem revisão&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Elastic IP só se a aplicação realmente exigir IP fixo&lt;/span&gt;
&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"aws_eip"&lt;/span&gt; &lt;span class="s2"&gt;"app_eip"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;count&lt;/span&gt;    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;assign_elastic_ip&lt;/span&gt; &lt;span class="err"&gt;?&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
  &lt;span class="nx"&gt;instance&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;aws_instance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;
  &lt;span class="nx"&gt;domain&lt;/span&gt;   &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"vpc"&lt;/span&gt;

  &lt;span class="nx"&gt;tags&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"app-eip-${var.environment}"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As decisões que separam isso de um tutorial: AMI puxada via SSM (sempre patched, nunca ID fixo apodrecendo), sem &lt;code&gt;key_name&lt;/code&gt; (acesso via Session Manager), &lt;code&gt;credit_specification&lt;/code&gt; explícito, IMDSv2 forçado, EBS criptografado com IOPS/throughput definidos à parte do tamanho, &lt;code&gt;lifecycle.ignore_changes&lt;/code&gt; na AMI, e Elastic IP condicional em vez de sempre criado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Concluindo
&lt;/h2&gt;

&lt;p&gt;EC2 parece simples até você perceber que cada escolha — tipo de instância, modo de crédito, tipo de disco, forma de acesso, IP, bootstrap, contrato de compra — impacta performance, segurança e o boleto do fim do mês. Não existe configuração padrão certa pra todo mundo, existe a certa pro seu workload, e isso só se descobre com dado real, não achismo.&lt;/p&gt;

&lt;p&gt;Terminei de escrever isso e fui conferir se ainda tenho Elastic IP esquecido rodando por aí. Tinha um. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ship safe, folks.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>DevSecOps: Cadê a Segurança Nessa Esteira?</title>
      <dc:creator>Felipe Duque</dc:creator>
      <pubDate>Tue, 07 Jul 2026 22:46:30 +0000</pubDate>
      <link>https://dev.to/duquedotdev/devsecops-cade-a-seguranca-nessa-esteira-45kc</link>
      <guid>https://dev.to/duquedotdev/devsecops-cade-a-seguranca-nessa-esteira-45kc</guid>
      <description>&lt;p&gt;Demorei um tempo bom pra decidir como abrir esse texto, porque toda vez que eu tentava resumir DevSecOps numa frase só, saía capenga. Cheguei numa: apesar de pertencerem a rotinas completamente diferentes, cozinha de restaurante e esteira de deploy não têm tantas diferenças assim.&lt;/p&gt;

&lt;p&gt;Pensa comigo: uma cozinha que só faz faxina grande na antevéspera da visita da vigilância sanitária tem, tecnicamente, o mesmo problema de um time que só chama o pessoal de segurança pra revisar o código na véspera do deploy pra produção. Fica tudo impecável no dia da inspeção, e uma bagunça em todos os outros 364.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Cara, isso parece exagero, né? Não é. &lt;em&gt;So.. here we go.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  O que é DevSecOps
&lt;/h2&gt;

&lt;p&gt;DevSecOps é basicamente meter segurança dentro da esteira de desenvolvimento, ao invés de deixá-la pra depois, como aquele item do backlog que todo mundo empurra porque "dessa vez vai dar certo". Isso tem nome: &lt;strong&gt;shift-left&lt;/strong&gt;. Empurrar a validação de segurança pra mais cedo no ciclo, lá na esquerda da linha do tempo, antes que o commit já esteja em produção e vire dor de cabeça de madrugada.&lt;/p&gt;

&lt;p&gt;Um relatório da IBM de 2025 sobre custo de vazamento de dados mostra que uma brecha aberta em ambiente de nuvem pública leva, em média, 251 dias pra ser identificada e contida.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Duzentos e cinquenta e um dias com a porta aberta e ninguém percebendo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O estrago sai por uns US$ 4,18 milhões, e se o incidente atravessar múltiplos ambientes — nuvem, on-premises, SaaS, tudo junto — a conta sobe pra US$ 5,05 milhões. Não é estatística de slide, é o motivo pelo qual seu gerente de repente virou fã de segurança.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk42cazhxlubbnvix04ao.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk42cazhxlubbnvix04ao.png" alt=" " width="799" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Os 3 Pilares de DevSecOps
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Shift-Left (SAST e verificação estática)
&lt;/h3&gt;

&lt;p&gt;Ocorre quando você analisa o código antes mesmo dele virar build, procurando vulnerabilidade conhecida, segredo vazado (aquela chave de API esquecida no repositório — já commitei uma sem querer, uma vez, não me orgulho) e dependência desatualizada.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sugestão:&lt;/strong&gt; automatize o scan como gate obrigatório do pull request, não como sugestão do time de segurança que "quando der, a gente olha".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  2. Segurança como Código (IaC + policy as code)
&lt;/h3&gt;

&lt;p&gt;Ocorre quando a configuração de infraestrutura — bucket S3, security group, IAM role — é escrita, versionada e revisada como qualquer outro código, em vez de configurada manualmente no console da AWS "só dessa vez, depois eu documento". &lt;em&gt;(Ninguém documenta depois.)&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sugestão:&lt;/strong&gt; use ferramentas como Checkov, tfsec ou o próprio AWS Config pra bloquear infraestrutura mal configurada antes do apply. Existem guardrails automáticos, tipo Service Control Policies, mas nem toda organização os usa. Então: "Take it easy", mas configure.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3. Monitoramento Contínuo (runtime e resposta)
&lt;/h3&gt;

&lt;p&gt;A segurança não acaba no deploy. Ela continua rodando junto com a aplicação em produção, de olho em comportamento anômalo, tentativa de escalonamento de privilégio, tráfego saindo de onde não devia.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Sugestão:&lt;/strong&gt; visibilidade contínua (GuardDuty, CloudTrail, alerta bem calibrado) importa mais do que qualquer ferramenta cara comprada e esquecida no canto.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Algumas Dicas Extras
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Cuidado redobrado com bucket S3 público. Não importa se é "só um teste" — é o tipo de coisa que vira superfície de ataque enquanto você ainda procura o botão de tornar privado.&lt;/li&gt;
&lt;li&gt;Pegue leve com credencial hardcoded. Em repositório público, ela desenvolve vida própria rapidinho.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ROTACIONE CREDENCIAL EXPOSTA NA HORA!&lt;/strong&gt; Um secret vazado em repositório público costuma ser encontrado e testado por scanner automatizado em menos de um minuto.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Caso Real
&lt;/h2&gt;

&lt;p&gt;Em 2019, a Capital One sofreu um dos incidentes mais estudados da história recente de segurança em nuvem: uma configuração incorreta de firewall em um WAF permitiu que uma ex-funcionária da AWS acessasse dados de mais de 100 milhões de clientes, explorando uma instância mal configurada pra assumir uma role com permissão excessiva.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Não foi "hacker genial usando zero-day sofisticado". Foi configuração, permissão de IAM generosa demais e falta de detecção em tempo hábil — os três pilares que a gente acabou de listar, ignorados ao mesmo tempo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Raramente é uma causa isolada. É sempre uma sequência de pequenas negligências que, empilhadas, viram incidente grande. E o alerta, quando chega, geralmente é tarde: um pesquisador de segurança no Twitter, ou pior, um cliente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Concluindo
&lt;/h2&gt;

&lt;p&gt;Shift-left não é modinha de conferência. É o básico bem feito, todo santo dia, não só na véspera da auditoria. Terminei de escrever isso e já fui revisar as IAM roles do meu próprio ambiente.&lt;/p&gt;

&lt;p&gt;No próximo texto entramos em um serviço específico da AWS e como ele se encaixa nesse ecossistema. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ship safe, folks.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>reviews</category>
      <category>comics</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>💸 A Stack pra Ganhar Dinheiro em 2025/2026</title>
      <dc:creator>Felipe Duque</dc:creator>
      <pubDate>Sat, 11 Oct 2025 12:16:42 +0000</pubDate>
      <link>https://dev.to/duquedotdev/a-stack-pra-ganhar-dinheiro-em-20252026-4mj0</link>
      <guid>https://dev.to/duquedotdev/a-stack-pra-ganhar-dinheiro-em-20252026-4mj0</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feebahhfhxvb7v9ghnc5s.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feebahhfhxvb7v9ghnc5s.jpg" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  O blueprint técnico que une velocidade, performance e custo zero
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;“Em 2025, quem dominar a stack que valida rápido e envelhece bem — domina o jogo.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O hype não é o problema. O problema é usar ferramentas modernas sem propósito arquitetural.&lt;br&gt;&lt;br&gt;
A stack que realmente vai gerar dinheiro em 2025/2026 não é a mais “nova” — é a mais &lt;strong&gt;intencionalmente coesa&lt;/strong&gt;, com &lt;strong&gt;alta performance, tipagem total e custo zero de operação inicial&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Este artigo consolida o blueprint que desenvolvi para microserviços de alto desempenho e MVPs de validação rápida, baseado em &lt;strong&gt;Clean Architecture&lt;/strong&gt;, &lt;strong&gt;DDD&lt;/strong&gt;, &lt;strong&gt;Elysia.js&lt;/strong&gt;, &lt;strong&gt;Bun&lt;/strong&gt; e &lt;strong&gt;Next.js&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧱 Backend: Performance com Disciplina Arquitetural
&lt;/h2&gt;

&lt;p&gt;O backend moderno precisa ser rápido, tipado e imune à decadência de código.&lt;br&gt;&lt;br&gt;
A combinação que entrega tudo isso é:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bun + Elysia.js + Drizzle ORM
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧠 1. Runtime: Bun
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;3–4x mais rápido que Node.js em throughput.&lt;/li&gt;
&lt;li&gt;Nativo em TypeScript.&lt;/li&gt;
&lt;li&gt;Inclui test runner, bundler e package manager — reduz fricção e elimina toolchain redundante.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bun create elysia my-service
bun dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  ⚡ 2. Framework: Elysia.js
&lt;/h3&gt;

&lt;p&gt;Projetado sob medida para o Bun, o Elysia entrega &lt;strong&gt;type safety end-to-end&lt;/strong&gt;, sem precisar de boilerplate extra.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Elysia&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;elysia&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Elysia&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/hello&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;world&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;🚀 Running on http://localhost:3000&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Combinado com o &lt;strong&gt;Eden Treaty&lt;/strong&gt;, gera automaticamente o cliente de API tipado para o frontend.&lt;br&gt;&lt;br&gt;
Se compila, está certo. Literalmente.&lt;/p&gt;


&lt;h3&gt;
  
  
  🧩 3. ORM: Drizzle ORM
&lt;/h3&gt;

&lt;p&gt;Zero mágica. Zero overhead.&lt;br&gt;&lt;br&gt;
Gera migrações SQL reais a partir do schema TypeScript — mantendo controle e velocidade.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;pgTable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;uuid&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;drizzle-orm/pg-core&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;pgTable&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;users&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;defaultRandom&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;primaryKey&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🏛 4. Arquitetura: Clean + DDD + SOLID
&lt;/h3&gt;

&lt;p&gt;Separar responsabilidades é o que mantém um projeto “vendável” e sustentável.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/src
├── domain/          # Entidades e regras de negócio puras
├── application/     # Casos de uso e orquestração
├── infrastructure/  # Banco, APIs externas, provedores
└── presentation/    # Controladores Elysia + injeção de dependências
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cada camada depende apenas da anterior.&lt;br&gt;&lt;br&gt;
Nada de lógica de domínio dentro de handlers. Nada de ORM no controller.&lt;/p&gt;


&lt;h3&gt;
  
  
  🧰 Stack Complementar
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Categoria&lt;/th&gt;
&lt;th&gt;Ferramenta&lt;/th&gt;
&lt;th&gt;Propósito&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;better-auth&lt;/td&gt;
&lt;td&gt;Sessões seguras e customizáveis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Access Control&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;@casl/ability&lt;/td&gt;
&lt;td&gt;ABAC dinâmico e contextual&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mensageria&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;RabbitMQ + Transactional Outbox&lt;/td&gt;
&lt;td&gt;EDA confiável&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Segurança&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;mTLS + PQC (CRYSTALS-Kyber/Dilithium)&lt;/td&gt;
&lt;td&gt;Autenticação serviço-a-serviço&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Observabilidade&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pino + OpenTelemetry + Grafana&lt;/td&gt;
&lt;td&gt;Logs, métricas e traces&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CI/CD&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Nx + GitHub Actions&lt;/td&gt;
&lt;td&gt;Pipelines otimizadas e baratas&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h3&gt;
  
  
  🧾 Deploy Stack (100% Free Tier)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Sim, é possível lançar um SaaS completo sem gastar 1 real.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Serviço&lt;/th&gt;
&lt;th&gt;Função&lt;/th&gt;
&lt;th&gt;Free Tier&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🐳 Fly.io&lt;/td&gt;
&lt;td&gt;Compute (Docker)&lt;/td&gt;
&lt;td&gt;3 VMs gratuitas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🐘 Neon.tech&lt;/td&gt;
&lt;td&gt;PostgreSQL serverless&lt;/td&gt;
&lt;td&gt;0.5GB RAM + 3GB storage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧠 Upstash&lt;/td&gt;
&lt;td&gt;Redis serverless&lt;/td&gt;
&lt;td&gt;10k ops/dia&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🐰 CloudAMQP&lt;/td&gt;
&lt;td&gt;RabbitMQ&lt;/td&gt;
&lt;td&gt;1M mensagens/mês&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⚙️ GitHub Actions&lt;/td&gt;
&lt;td&gt;CI/CD&lt;/td&gt;
&lt;td&gt;2000 min/mês&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;💡 &lt;strong&gt;Dica&lt;/strong&gt;: provisione todos na mesma região (ex: &lt;code&gt;us-east-1&lt;/code&gt;) para evitar latência interprovável.&lt;/p&gt;


&lt;h2&gt;
  
  
  🎨 Frontend: O Espelho Tipado do Backend
&lt;/h2&gt;

&lt;p&gt;O frontend não é um consumidor — é um &lt;strong&gt;espelho semântico&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Usando &lt;strong&gt;Eden Treaty&lt;/strong&gt;, o cliente de API conhece os mesmos tipos do backend.&lt;br&gt;&lt;br&gt;
Zero inconsistência, zero boilerplate.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;treaty&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@elysiajs/eden&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../backend&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;treaty&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.example.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;123&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se o contrato do backend mudar, o TypeScript do frontend quebra — &lt;strong&gt;e isso é ótimo&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧠 Stack do Frontend (2025 Edition)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Camada&lt;/th&gt;
&lt;th&gt;Tecnologia&lt;/th&gt;
&lt;th&gt;Justificativa&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Framework&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Next.js (App Router)&lt;/td&gt;
&lt;td&gt;SSR + Server Components + Edge deploy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;API Client&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Eden Treaty&lt;/td&gt;
&lt;td&gt;Type-safe entre front e back&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Layer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;TanStack Query&lt;/td&gt;
&lt;td&gt;Cache, revalidação e UX fluida&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Forms&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;React Hook Form + Zod&lt;/td&gt;
&lt;td&gt;Validação e schemas compartilhados&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;UI/UX&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tailwind + shadcn/ui&lt;/td&gt;
&lt;td&gt;Performance e controle total&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;State Management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Zustand&lt;/td&gt;
&lt;td&gt;Estado global leve&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Testes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vitest + Playwright&lt;/td&gt;
&lt;td&gt;Unit + E2E modernos&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Deploy automático na &lt;strong&gt;Vercel (Hobby Plan)&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Preview a cada PR
&lt;/li&gt;
&lt;li&gt;Edge Network global
&lt;/li&gt;
&lt;li&gt;Zero setup&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔬 Filosofia: O Stack Como Vantagem Competitiva
&lt;/h2&gt;

&lt;p&gt;O maior custo do desenvolvimento moderno é &lt;strong&gt;a entropia&lt;/strong&gt; — não a infraestrutura.&lt;/p&gt;

&lt;p&gt;A Clean Architecture, o Type-Safety e o Always-Free Stack trabalham juntos para garantir:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧩 &lt;strong&gt;Velocidade inicial sem débito técnico&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;⚙️ &lt;strong&gt;Testabilidade real, isolada e previsível&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🔒 &lt;strong&gt;Segurança criptográfica de ponta a ponta&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;💰 &lt;strong&gt;Custo operacional = R$0 até o MVP tracionar&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;O código é commodity.&lt;br&gt;&lt;br&gt;
A execução rápida e previsível é o diferencial competitivo.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧩 Blueprint Unificado (Backend + Frontend)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Categoria&lt;/th&gt;
&lt;th&gt;Backend&lt;/th&gt;
&lt;th&gt;Frontend&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Runtime&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bun&lt;/td&gt;
&lt;td&gt;Node.js (Vercel)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Framework&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Elysia.js&lt;/td&gt;
&lt;td&gt;Next.js&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ORM / Data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Drizzle ORM&lt;/td&gt;
&lt;td&gt;Eden Treaty + TanStack Query&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Arquitetura&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Clean + DDD + SOLID&lt;/td&gt;
&lt;td&gt;Type-safe mirror&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Validação&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Zod&lt;/td&gt;
&lt;td&gt;Zod (compartilhado)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auth / Sec&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;better-auth + mTLS PQC&lt;/td&gt;
&lt;td&gt;JWT/OAuth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Infra&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Fly.io + Neon + Upstash + CloudAMQP&lt;/td&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CI/CD&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Nx + GitHub Actions&lt;/td&gt;
&lt;td&gt;Nx + Vercel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;UI/UX&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Tailwind + shadcn/ui&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Obs.&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pino + OpenTelemetry&lt;/td&gt;
&lt;td&gt;Log + Metrics Integradas&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  ⚡ TL;DR
&lt;/h2&gt;

&lt;p&gt;Se você quer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;lançar &lt;strong&gt;10 MVPs/ano&lt;/strong&gt; sem virar refém de custos,
&lt;/li&gt;
&lt;li&gt;rodar &lt;strong&gt;microsserviços performáticos&lt;/strong&gt; com &lt;strong&gt;zero débito técnico&lt;/strong&gt;,
&lt;/li&gt;
&lt;li&gt;e construir &lt;strong&gt;produtos escaláveis com um único stack&lt;/strong&gt;,
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;então o caminho está traçado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Backend → Bun + Elysia.js + Drizzle ORM
Frontend → Next.js + Eden Treaty + TanStack Query
Infra → Nx + GitHub Actions + Fly.io + Vercel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;💰 &lt;strong&gt;Stack pra ganhar dinheiro em 2025/2026.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Performance, tipagem e execução acima de hype.&lt;/p&gt;




&lt;h2&gt;
  
  
  📎 Call to Action
&lt;/h2&gt;

&lt;p&gt;Se você lidera um time de engenharia, CTO ou dev sênior:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Salve este blueprint.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implemente um microserviço piloto com ele.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Me conte no LinkedIn os resultados.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quer que eu publique o repositório base “Template 2025” no GitHub para uso público (com CI/CD, auth e EDA prontos)?&lt;br&gt;&lt;br&gt;
💬 Comente &lt;strong&gt;“Quero o template”&lt;/strong&gt; e eu libero o link.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
