AWS S3: guia para armazenar arquivos e imagens nos seus projetos

Rocketseat

Conheça o Rocketseat Para Empresas
Oferecemos soluções personalizadas para empresas de todos os portes.
Faaala, dev! Tudo na paz?
Se você já começou a construir seus primeiros projetos, provavelmente já se deparou com uma pergunta clássica: "Onde eu guardo as imagens de perfil dos usuários? E os arquivos que eles precisam subir?". Salvar tudo no mesmo servidor da aplicação parece uma boa ideia no começo, mas, acredite, isso pode virar uma baita dor de cabeça no futuro.
E se eu te disser que existe uma solução robusta, segura e surpreendentemente simples para isso? Se você já se sentiu um pouco perdido no universo da AWS, saiba que está no lugar certo. Hoje, vamos focar em uma das ferramentas mais poderosas e fáceis de começar: o Amazon S3.
Ao final desta conversa, você vai entender exatamente como usar o S3 para dar superpoderes ao armazenamento dos seus projetos. Partiu atacar esse mistério?
O que é o Amazon S3 e por que ele vai impulsionar seus projetos?
Amazon S3 (Simple Storage Service) é como um HD externo infinito, super seguro e acessível de qualquer lugar do mundo. É um serviço criado para uma única coisa: guardar e servir arquivos (que a AWS chama de "objetos") de forma extremamente confiável.
Esqueça a preocupação com espaço em disco no seu servidor. Com o S3, você organiza seus arquivos em "pastas" na nuvem, chamadas de buckets, e deixa que a AWS cuide de todo o resto.
Principais benefícios na prática
- Durabilidade e segurança: a AWS projeta o S3 para ter 99,999999999% de durabilidade. Na prática, isso significa que se você armazenar 10.000 arquivos, pode esperar perder um único arquivo a cada 10 milhões de anos. É mais fácil um meteoro atingir a Terra do que você perder um arquivo!
- Custo-benefício: armazenar dados no S3 é incrivelmente barato, custando centavos por gigabyte por mês. Isso o torna perfeito para seu projeto pessoal ou até para uma startup que está começando.
- Escalabilidade: seu projeto bombou e agora tem milhões de arquivos? Sem problemas! O S3 cresce com você, sem que você precise se preocupar em gerenciar servidores ou comprar mais espaço.
Seu primeiro bucket no S3 em 4 passos
Bora para a parte divertida? Criar seu primeiro "contêiner" de arquivos é mais rápido do que fazer um café. Se liga no passo a passo!
Passo 1: acessando o console da AWS
Primeiro, acesse sua conta da AWS. Na barra de busca principal, digite "S3" e clique no serviço. Você vai cair no painel principal do S3.
Passo 2: criando seu primeiro bucket
Clique no botão "Criar bucket". Agora, você precisa definir duas coisas importantes:
- Nome do bucket: precisa ser um nome único no mundo todo (pense nele como um domínio de site). Uma boa prática é usar o nome do seu projeto, como
meu-app-rocketseat-uploads.
- Região da AWS: escolha a região mais próxima dos seus usuários para diminuir a latência. Para o Brasil,
sa-east-1(São Paulo) é a melhor escolha.
Mantenha a opção "Bloquear todo o acesso público" ativada por enquanto. Esta é a configuração padrão e mais segura desde 2023. Vamos ajustar o acesso público da forma correta no próximo passo.
Passo 3: configurando o acesso público com uma Bucket Policy
Desde 2023, a AWS tornou o bloqueio de acesso público o padrão, e as antigas "ACLs" foram desabilitadas para novos buckets. A forma moderna e segura de liberar o acesso de leitura para seus arquivos é através de uma política de bucket (bucket policy).
- Dentro do seu bucket, vá para a aba "Permissões".
- Role para baixo até "Política de bucket" e clique em "Editar".
- Cole o JSON abaixo. Ele diz: "Permita que qualquer pessoa (
"Principal": "*") execute a ação de ler objetos ("Action": "s3:GetObject") neste bucket específico".
Atenção: substitua
SEU-BUCKET pelo nome exato do seu bucket.{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::SEU-BUCKET/*" } ] }
Clique em "Salvar alterações". Agora seu bucket está pronto para servir arquivos publicamente da maneira correta!
Passo 4: fazendo seu primeiro upload manual
Com o bucket criado e a política aplicada, clique no nome dele na lista. Agora é só clicar em "Carregar", arrastar um arquivo do seu computador para a janela e confirmar. Pronto! Você acabou de subir seu primeiro arquivo para a nuvem da AWS.
Bora codar! Exemplo de upload com Node.js
Legal, subir o arquivo manualmente é fácil, mas o poder real está em fazer sua aplicação fazer isso, certo? Vamos ver um exemplo simples usando Node.js para que sua API possa enviar arquivos diretamente para o S3.
Configurando as credenciais de acesso (IAM)
Sua aplicação precisa de "permissão" para acessar o S3. No console da AWS, procure pelo serviço IAM (Identity and Access Management). O ideal é sempre seguir o princípio de menor privilégio, ou seja, dar apenas as permissões estritamente requeridas.
Em vez de usar políticas super poderosas como a
AmazonS3FullAccess, vamos criar uma política customizada mais segura:- No IAM, vá em "Políticas" e "Criar política".
- Vá para a aba JSON e cole o seguinte código, substituindo
SEU-BUCKETpelo nome do seu bucket:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject" ], "Resource": "arn:aws:s3:::SEU-BUCKET/*" } ] }
Salve essa política. Agora, crie um novo usuário programático no IAM, anexe a ele a política que você acabou de criar e anote a Chave de acesso e a Chave de acesso secreta.
Atenção: nunca coloque essas chaves diretamente no seu código! Use variáveis de ambiente.
O snippet de código: subindo um arquivo na prática
Primeiro, instale o SDK da AWS para JavaScript:
npm install @aws-sdk/client-s3
Agora, vamos criar uma função para fazer o upload. Note que removemos o parâmetro
ACL, pois ele não é mais exigido com a configuração de política de bucket.// Importa o cliente S3 e o comando de upload import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3"; import 'dotenv/config'; // Para carregar variáveis de ambiente // Configura o cliente S3 com suas credenciais e região const s3Client = new S3Client({ region: process.env.AWS_REGION, credentials: { accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, }, }); async function uploadArquivo(fileContent, fileName) { const params = { Bucket: process.env.AWS_BUCKET_NAME, // O nome do seu bucket Key: fileName, // O nome do arquivo no S3 Body: fileContent, // O conteúdo do arquivo }; try { const command = new PutObjectCommand(params); const result = await s3Client.send(command); // Constrói a URL pública do arquivo (formato virtual-hosted-style) const url = `https://${params.Bucket}.s3.${process.env.AWS_REGION}.amazonaws.com/${params.Key}`; console.log(`Arquivo enviado com sucesso! Acessível em: ${url}`); // Exemplo de uso com um dev da Rocketseat const dev = { nome: "Laís", fotoUrl: url } return { dev, result }; } catch (error) { console.error("Erro detalhado no upload:", error); throw error; // Repassa o erro para tratamento em um nível superior } }
Como o S3 se conecta com o resto do universo AWS?
Agora a mágica acontece! O S3 não trabalha sozinho. Lembra daquele nosso papo sobre a "santíssima trindade" da AWS (EC2, S3 e RDS)? É aqui que tudo se encaixa.
Imagine uma rede social:
- Sua API (o código) roda em um servidor virtual EC2.
- Quando uma pessoa usuária faz o upload de uma foto, a API no EC2 não guarda a imagem no seu próprio disco. Em vez disso, ela executa um código como o que vimos acima e envia o arquivo diretamente para um bucket no S3.
- O S3 retorna a URL pública da imagem.
- Finalmente, sua API pega as informações do post (a legenda e a URL da imagem no S3) e salva tudo em um banco de dados gerenciado pelo RDS.
Dessa forma, cada serviço faz o que sabe fazer de melhor, criando uma arquitetura escalável e robusta.
Seu próximo deploy está mais perto do que você imagina!
Viu como começar a usar um serviço poderoso como o S3 pode ser mais simples do que parece? Entender como essas peças da AWS se encaixam é o primeiro passo para construir aplicações de alto nível. O poder da nuvem está nas suas mãos.
A base lógica para construir APIs robustas que rodam no EC2 e se comunicam com o S3 é o que faz a diferença. Cada peça do quebra-cabeça se encaixa quando você tem os fundamentos sólidos.
Quer alcançar o próximo nível? Conheça a formação Full-Stack da Rocketseat e comece a construir os projetos que hoje você só imagina. O seu primeiro deploy na AWS está mais perto do que você pensa.
Conheça o Rocketseat Para Empresas
Oferecemos soluções personalizadas para empresas de todos os portes.
Artigos_
Explore conteúdos relacionados
Descubra mais artigos que complementam seu aprendizado e expandem seu conhecimento.
NewsletterReceba conteúdos inéditos e novidades gratuitamente
