<?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: Flávio Paixão</title>
    <description>The latest articles on DEV Community by Flávio Paixão (@flvio_paixo_88c4d1183b2).</description>
    <link>https://dev.to/flvio_paixo_88c4d1183b2</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3894344%2Fd669968d-aa7e-4ff9-9220-ff360387f09c.png</url>
      <title>DEV Community: Flávio Paixão</title>
      <link>https://dev.to/flvio_paixo_88c4d1183b2</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/flvio_paixo_88c4d1183b2"/>
    <language>en</language>
    <item>
      <title># Como hospedei meu portfólio na AWS com S3, CloudFront e CI/CD do zero</title>
      <dc:creator>Flávio Paixão</dc:creator>
      <pubDate>Thu, 23 Apr 2026 13:10:48 +0000</pubDate>
      <link>https://dev.to/flvio_paixo_88c4d1183b2/-como-hospedei-meu-portfolio-na-aws-com-s3-cloudfront-e-cicd-do-zero-4i6n</link>
      <guid>https://dev.to/flvio_paixo_88c4d1183b2/-como-hospedei-meu-portfolio-na-aws-com-s3-cloudfront-e-cicd-do-zero-4i6n</guid>
      <description>&lt;p&gt;Quando decidi criar meu portfólio, tomei uma decisão: não ia hospedar no GitHub Pages nem no Vercel.&lt;/p&gt;

&lt;p&gt;Queria aprender na prática. Queria que cada vez que alguém abrisse meu portfólio, ele estivesse rodando em uma infraestrutura real — a mesma que grandes empresas usam.&lt;/p&gt;

&lt;p&gt;Então fui para a AWS.&lt;/p&gt;




&lt;h2&gt;
  
  
  A ideia
&lt;/h2&gt;

&lt;p&gt;A arquitetura é simples mas poderosa:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GitHub → GitHub Actions → S3 → CloudFront → Usuário
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O site fica hospedado em um bucket S3. O CloudFront distribui o conteúdo globalmente via CDN. E a cada push no GitHub, o deploy acontece automaticamente.&lt;/p&gt;

&lt;p&gt;Zero acesso manual ao servidor. Zero FTP. Zero dor de cabeça.&lt;/p&gt;




&lt;h2&gt;
  
  
  Passo a passo do que aprendi
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Criando o bucket S3
&lt;/h3&gt;

&lt;p&gt;O S3 (Simple Storage Service) é o serviço de armazenamento de objetos da AWS. Para hospedar um site estático, você:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cria um bucket com nome único&lt;/li&gt;
&lt;li&gt;Habilita hospedagem de site estático&lt;/li&gt;
&lt;li&gt;Configura as permissões para acesso público&lt;/li&gt;
&lt;li&gt;Cria uma bucket policy liberando leitura&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A parte mais confusa foi entender permissões. A AWS bloqueia tudo por padrão — e isso é ótimo para segurança, mas exige atenção na configuração.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Configurando o CloudFront
&lt;/h3&gt;

&lt;p&gt;O CloudFront é a CDN (Content Delivery Network) da AWS. Em vez de servir o site só de uma região, ele replica o conteúdo em Edge Locations ao redor do mundo.&lt;/p&gt;

&lt;p&gt;Isso significa que um usuário no Japão vai acessar o site com a mesma velocidade que alguém aqui no Brasil.&lt;/p&gt;

&lt;p&gt;O que configurei:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Origem apontando para o bucket S3&lt;/li&gt;
&lt;li&gt;Redirect HTTP para HTTPS&lt;/li&gt;
&lt;li&gt;Política de cache&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Automatizando o deploy com GitHub Actions
&lt;/h3&gt;

&lt;p&gt;Essa foi a parte que mais gostei. Criei um arquivo &lt;code&gt;.yml&lt;/code&gt; no repositório que faz o seguinte a cada push na branch main:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Faz checkout do código&lt;/li&gt;
&lt;li&gt;Sincroniza os arquivos com o bucket S3&lt;/li&gt;
&lt;li&gt;Invalida o cache do CloudFront&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As credenciais AWS ficam armazenadas nos GitHub Secrets — nunca no código.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deploy to S3&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;aws s3 sync . s3://meu-bucket --delete&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Invalidate CloudFront&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;aws cloudfront create-invalidation --distribution-id ${{ secrets.CF_ID }} --paths "/*"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  O que esse projeto me ensinou
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;IAM na prática&lt;/strong&gt; — precisei criar um usuário com permissões específicas só para o deploy. Nada de AdministratorAccess no CI/CD.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cache é complicado&lt;/strong&gt; — na primeira vez que atualizei o site, ele não mudou. Aprendi que o CloudFront faz cache agressivo e precisa de invalidação.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Infraestrutura como documentação&lt;/strong&gt; — o próprio pipeline do GitHub Actions documenta como o deploy funciona. Qualquer pessoa que abrir o repositório entende o processo.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resultado
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;a href="https://projeto-aws-681892816208-sa-east-1-an.s3.sa-east-1.amazonaws.com/index.html" rel="noopener noreferrer"&gt;Ver portfólio ao vivo&lt;/a&gt;&lt;br&gt;
Pronto! Focado só no portfólio S3 + CloudFront + CI/CD.&lt;/p&gt;

&lt;p&gt;📁 &lt;a href="https://github.com/Flavio-Paixao" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Nos próximos posts vou falar sobre os outros projetos que construí na AWS — API REST no EC2, API Serverless com Lambda e infraestrutura como código com Terraform.&lt;/p&gt;

&lt;p&gt;Se tiver alguma dúvida ou sugestão, comenta aqui!&lt;/p&gt;

&lt;h1&gt;
  
  
  aws #python #cloud #beginners #devops #portfolio #caree
&lt;/h1&gt;

</description>
      <category>aws</category>
      <category>cicd</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
