Introdução

Você já percebeu que seu site está mais lento por causa de todas as imagens e ativos que precisa carregar? Ou talvez você tenha lutado para gerenciar esses arquivos à medida que seu site cresce. Aqui está a questão: armazenar e servir imagens diretamente do seu servidor web pode parecer conveniente no início, mas pode rapidamente se tornar um gargalo.

É aí que a AWS entra. Com serviços como o S3 para armazenamento e o CloudFront como um poderoso CDN, você pode gerenciar, otimizar e entregar imagens e ativos para seus usuários de forma super rápida, não importa onde eles estejam no mundo.

Neste guia, vou te mostrar por que é uma má ideia manter imagens no servidor da sua aplicação web, por que separar os serviços é uma mudança de jogo e como as ferramentas da AWS podem facilitar muito a sua vida. Vamos lá!

Por que Armazenar Imagens no Seu Servidor Web É uma Má Ideia

Aumento da Carga do Servidor

Quando seu servidor web é responsável por executar sua aplicação e servir imagens, ele pode rapidamente ficar sobrecarregado. Cada solicitação de imagem adiciona trabalho extra, desacelerando tudo. Se seu site recebe muito tráfego, o servidor pode ter dificuldades para acompanhar, causando atrasos ou até mesmo quedas. Imagine tentar carregar todas as suas compras e correr ao mesmo tempo—não é nada eficiente!

Escalabilidade Limitada

À medida que seu site cresce, o número de imagens e usuários também aumentará. Um único servidor web só pode lidar com tanto antes de você atingir um limite. Escalar muitas vezes significa gastar mais dinheiro em servidores maiores ou lidar com a dor de cabeça de migrar tudo. Com armazenamento em nuvem como o AWS S3, você não precisa se preocupar em ficar sem espaço—ele cresce com você, sem estresse.

Risco de Gargalos de Desempenho

Arquivos de imagem grandes podem desacelerar seu site, especialmente se você os estiver servindo do mesmo servidor que lida com a funcionalidade da sua aplicação. Quando uma parte do seu site está lenta, pode travar todo o resto, deixando os usuários frustrados com longos tempos de carregamento. Pense nisso como um engarrafamento em uma estrada de uma faixa—tudo fica congestionado.

Preocupações de Segurança

Servir imagens do seu servidor web pode expô-lo a riscos desnecessários. Hackers podem explorar vulnerabilidades para acessar informações sensíveis, ou outros sites podem roubar sua largura de banda ao hotlinkar suas imagens. Sem as devidas proteções, você pode acidentalmente revelar caminhos de arquivos do servidor, o que é como deixar sua porta da frente escancarada.

Por que Devemos Usar um CDN?

Se você já ficou irritado com um site que carrega devagar, você entenderá por que um CDN (Content Delivery Network) é uma mudança de jogo. Um CDN é como ter uma rede de mini armazéns espalhados pelo mundo, cada um armazenando cópias das imagens e ativos do seu site. Em vez de cada usuário ter que esperar que o conteúdo viaje todo o caminho do seu servidor principal, um CDN entrega a partir do armazém mais próximo, tornando tudo mais rápido e suave.

O CDN acelera a entrega de conteúdo distribuindo dados para servidores de borda globais.
O CDN acelera a entrega de conteúdo distribuindo dados para servidores de borda globais.

Aqui está o porquê de usar um CDN para entrega de imagens e ativos ser uma decisão acertada:

Tempos de Carregamento Mais Rápidos para Usuários em Todo Lugar

Vamos supor que seu servidor principal esteja em Nova York, mas alguém em Tóquio visita seu site. Sem um CDN, a solicitação deles precisa viajar metade do caminho ao redor do mundo, o que leva tempo. Com um CDN, um servidor perto de Tóquio entrega o conteúdo, reduzindo o tempo de viagem e fazendo seu site carregar rapidamente. Tempos de carregamento mais rápidos significam usuários mais felizes, e usuários felizes ficam mais tempo.

Redução de Latência e Melhoria na Experiência do Usuário

Latência é aquele atraso irritante entre um usuário clicando em algo e o conteúdo realmente aparecendo. Quanto mais longe um usuário estiver do seu servidor, maior será a latência. Um CDN resolve isso trazendo suas imagens e ativos mais perto do usuário, reduzindo atrasos e fazendo tudo parecer instantâneo. Seja alguém navegando no seu site do sofá em Londres ou de um café em Sydney, eles terão a mesma experiência fluida.

Descarregando Tráfego do Seu Servidor Principal

Pense no seu servidor web como um chef ocupado em um restaurante. Sem um CDN, o chef tem que lidar com tudo: cozinhar, servir e até entregar comida para clientes distantes. Com um CDN, o chef (seu servidor) pode se concentrar em cozinhar (executar sua aplicação), enquanto o CDN cuida da entrega (servindo imagens e ativos). Isso descarrega um monte de tráfego do seu servidor principal, evitando sobrecargas e mantendo seu site funcionando suavemente, mesmo durante picos de tráfego.

O que São S3 e CloudFront?

S3 (Simple Storage Service)

O S3 é a solução de armazenamento em nuvem segura, escalável e altamente confiável da Amazon. Ele é projetado para armazenar qualquer tipo de dado, incluindo imagens, vídeos e outros ativos, tornando-o uma escolha ideal para sites e aplicações. Seja você um blogueiro pessoal ou esteja gerenciando uma plataforma de e-commerce em grande escala, o S3 pode atender às suas necessidades de armazenamento sem esforço. Além disso, ele oferece níveis de armazenamento flexíveis, para que você pague apenas pelo que usa.

CloudFront

O CloudFront é o serviço de CDN (Content Delivery Network) da Amazon que garante uma entrega de conteúdo rápida e segura. Ele funciona armazenando em cache suas imagens e ativos em servidores de borda localizados ao redor do mundo, para que os usuários possam acessá-los rapidamente a partir do servidor mais próximo. Quando combinado com o S3, o CloudFront otimiza o processo de entrega, buscando ativos armazenados e servindo-os com latência mínima. Juntos, S3 e CloudFront fornecem uma solução poderosa, eficiente e escalável para gerenciar e entregar conteúdo de sites.

Custo de Usar S3 e CloudFront

Uma das melhores coisas sobre a AWS é que você paga apenas pelo que usa. Aqui está um resumo rápido:

  • Custos do S3:
    • Custos de Armazenamento: Você paga por GB de dados armazenados, com diferentes taxas dependendo do nível de armazenamento (por exemplo, Standard, Infrequent Access, Glacier).
    • Custos de Solicitação: Taxas aplicam-se para PUT, GET e outras solicitações feitas ao seu bucket.
    • Transferência de Dados: Transferir dados do S3 para a internet incorrerá em taxas adicionais.
  • Custos do CloudFront:
    • Transferência de Dados: Você paga pela quantidade de dados entregues aos usuários através de locais de borda.
    • Solicitações: Taxas aplicam-se para solicitações HTTP/HTTPS feitas ao CloudFront.
    • Preços Regionais: Os custos podem variar dependendo de onde seus usuários estão localizados.

Você pode consultar Amazon S3 Pricing e Amazon CloudFront Pricing para informações detalhadas.

Exemplo: Custo de Usar S3 e CloudFront

Vamos supor que você gerencie um pequeno site de e-commerce e precise armazenar e servir imagens de produtos. Aqui está um resumo simplificado dos custos:

Detalhes do Cenário

  • Armazenamento: 100 GB de imagens armazenadas no S3 (Nível Padrão).
  • Solicitações: 50.000 solicitações GET e 10.000 solicitações PUT para o S3 por mês.
  • Transferência de Dados: 100 GB de dados transferidos para o CloudFront.
  • Entrega de Dados do CloudFront: 100 GB de dados entregues aos usuários finais através do CDN.

Custos do S3

  1. Custos de Armazenamento:
  • 100 GB no Armazenamento Padrão do S3 = $2.30 por mês (aproximadamente $0.023 por GB).
  1. Custos de Solicitação:
  • 50.000 solicitações GET = $0.04 (aproximadamente $0.0004 por 1.000 solicitações).
  • 10.000 solicitações PUT = $0.05 (aproximadamente $0.005 por 1.000 solicitações).
  1. Custos de Transferência de Dados (para o CloudFront):
  • 100 GB = $0 (a transferência de dados do S3 para o CloudFront é gratuita).

Custo Total do S3: $2.39/mês

Custos do CloudFront

  1. Custos de Transferência de Dados (do CloudFront para os usuários):
  • 100 GB entregues aos usuários finais = $8.50 (aproximadamente $0.085 por GB para os primeiros 10 TB).
  1. Custos de Solicitação:
  • 50.000 solicitações HTTP/HTTPS = $0.10 (aproximadamente $0.002 por 1.000 solicitações).

Custo Total do CloudFront: $8.60/mês

Total Geral

Custo Mensal Total: $2.39 + $8.60 = $10.99

Configurando AWS S3 e CloudFront para Hospedagem de Imagens e Ativos

Este guia irá te mostrar como configurar AWS S3 e CloudFront para servir imagens de forma eficiente com um subdomínio personalizado.

Esta configuração garante que:

  • Solicitações dos seus domínios permitidos (por exemplo, yoursite.com) podem acessar os ativos.
  • Solicitações sem cabeçalho Referer (por exemplo, acesso direto às URLs do S3) são bloqueadas.
  • Solicitações de sites não autorizados (hotlinking) são negadas.
  1. Criar um Certificado SSL no AWS Certificate Manager (ACM)

Como o CloudFront requer um certificado SSL válido para usar HTTPS com um domínio personalizado, o primeiro passo é gerar um certificado SSL.

  • Vá para o AWS Certificate Manager (ACM).
  • Clique em Solicitar um certificado.
  • Escolha Solicitar um certificado público.
  • Digite seu subdomínio (images.yoursite.com), e opcionalmente adicione *.yoursite.com se quiser um certificado wildcard.
  • Selecione Validação DNS (Recomendado).
  • Após enviar, a AWS fornecerá registros CNAME que você precisa adicionar no seu provedor de DNS (por exemplo, Route 53, Cloudflare, GoDaddy).
  • Uma vez que o registro DNS for validado, o certificado será emitido.
AWS Certificate Manager: Certificado SSL para Subdomínios Emitido com Sucesso
AWS Certificate Manager: Certificado SSL para Subdomínios Emitido com Sucesso
  1. Criar um Subdomínio para Servir Imagens

Agora que o certificado SSL está pronto, configure um subdomínio (images.yoursite.com) para servir suas imagens.

  • Vá para o seu provedor de DNS (Route 53, Cloudflare ou outro).
  • Crie um registro CNAME:
    • Nome do Registro: images
    • Tipo: CNAME
    • Valor: <seu-id-de-distribuição-cloudfront>.cloudfront.net
  1. Criar uma Distribuição CloudFront

Agora, configure o CloudFront para servir imagens do S3.

  • Vá para AWS CloudFront → Criar Distribuição.
  • Sob Origem, configure:
    • Nome do Domínio de Origem: Selecione seu bucket S3.
    • Acesso de Origem: Escolha Identidades de acesso legadasCriar Identidade de Acesso de Origem (OAI).
    • Política do Bucket: Selecione Eu vou atualizar a política do bucket manualmente.
  • Configurar Comportamentos:
    • Comprimir Objetos Automaticamente: ✅ Sim
    • Política de Protocolo do Visualizador: Redirecionar HTTP para HTTPS
    • Métodos HTTP Permitidos: GET, HEAD
    • Restringir Acesso do Visualizador: ❌ Não (a menos que você queira URLs assinadas)
  • Configurações de Cache e Solicitação de Origem:
    • Política de Cache: ✅ CachingOptimized
    • Política de Solicitação de Origem: ✅ UserAgentRefererHeaders (Passa Referer para o S3)
  • Atribuir o Certificado SSL:
    • Sob Configurações, escolha Certificado SSL Personalizado.
    • Selecione o certificado que você criou no AWS Certificate Manager.
  • Clique em Criar Distribuição.
CloudFront: Configuração de origem
CloudFront: Configuração de origem
CloudFront: Configuração de comportamento
CloudFront: Configuração de comportamento
  1. Configurar Permissões do Bucket S3

Por padrão, um bucket S3 é privado. Precisamos permitir que o CloudFront acesse-o.

  • Vá para S3 → Selecione seu bucket.
  • Permissões → Ativar ✅ Bloquear todo o acesso público (já que o CloudFront lidará com o acesso).
  • Atualize a Política do Bucket:

Substitua <nome do bucket> e <oai do cloud front> pelos seus valores reais:

  1. Passos Finais
  • Implantar CloudFront: Aguarde a distribuição do CloudFront terminar a implantação.
  • Testar Carregamento de Imagem:
    • Tente acessar uma imagem: https://images.yoursite.com/path/to/image.jpg
  • Se você receber 403 Forbidden, verifique se:
    • O OAI do CloudFront está corretamente atribuído.
    • A política do bucket S3 inclui o ARN do OAI.
    • O cabeçalho Referer está sendo encaminhado.

✅ Agora, você tem uma configuração de entrega de imagens totalmente configurada, otimizada e segura com AWS S3 e CloudFront! 🚀

Conclusão

E aí está! Com AWS S3 e CloudFront trabalhando juntos, construímos uma maneira rápida, segura e econômica de servir imagens como um profissional. Chega de sobrecarregar seu servidor web ou lidar com tempos de carregamento lentos—o CloudFront cuida do trabalho pesado, enquanto o S3 mantém tudo organizado e seguro. Ao encaminhar o cabeçalho Referer e bloquear o acesso direto ao S3, também travamos as coisas para evitar hotlinking e tráfego indesejado. Agora suas imagens carregam rapidamente, permanecem protegidas e escalam sem esforço. Simples, eficiente e feito para durar! 🚀