Armazenamento de Objetos R2 vs S3: Como Eliminar Custos de Tráfego

Armazenamento de Objetos R2 vs S3: Como Eliminar Custos de Tráfego

A Rasteira do Tráfego na AWS: A Fatura Oculta do Armazenamento Cloud

Quando uma equipa de programadores começa a desenhar uma nova aplicação web ou loja online, consulta quase sempre a calculadora de preços da Amazon Web Services (AWS) para o serviço S3 (Simple Storage Service).

Os números parecem muito apelativos:

  • Custo de armazenamento em disco: cerca de 0,023$ por gigabyte ao mês.
  • Enviar ficheiros para a cloud (upload): Gratuito.

Se a empresa tiver 10 terabytes de fotografias de produtos, faturas em PDF e vídeos, calcula a fatura mensal: 10.000 GB * 0,023$ = 230$ por mês. O orçamento é aprovado pela gestão e a equipa instala o SDK da AWS.

Depois, a plataforma começa a receber milhares de utilizadores reais.

Os clientes visualizam 30 milhões de páginas por mês, descarregando 50 terabytes de tráfego pela internet fora. Quando a fatura do cartão de crédito chega no final do mês, a administração tem um choque brutal:

Armazenamento em Disco S3 (10 TB):              230,00 $
Tráfego de Saída para a Internet (50 TB):     4.250,00 $  <-- A ARMADILHA DO EGRESS!
Total Mensal de Armazenamento:                 4.480,00 $

Guardar os ficheiros custou 230 dólares, mas deixar os clientes descarregar as fotos custou quase vinte vezes mais! A cobrança de tráfego de saída (egress fees) na AWS funciona como um resgate financeiro: meter dados lá dentro é grátis, mas tirá-los cá para fora custa uma pequena fortuna.

  • O RESGATE DO EGRESS NA AWS vs ZERO EGRESS NO CLOUDFLARE R2
  • MODELO TRADICIONAL NA AWS S3: [Browser do Cliente] → Tráfego de Saída: 0,08$ por GB! → [Bucket AWS S3] (50 TB de tráfego = mais de 4.000$ por mês apenas em taxas de transferência!)
  • MODELO MODERNO CLOUDFLARE R2: [Browser do Cliente] → Tráfego de Saída: 0,00$ por GB! → [Bucket R2] (50 TB de tráfego = EXATAMENTE ZERO EUROS em taxas de transferência!)

Para protegeres os projetos da tua empresa com a disciplina que aplicamos nos nossos serviços de alojamento gerido, a solução passa por adotar armazenamento de objetos com zero egress no Cloudflare R2.

Cloudflare R2: Compatibilidade Total com S3 sem Custos de Transferência

Criado pela Cloudflare, o R2 revolucionou o mercado de infraestrutura ao eliminar por completo as taxas de tráfego de saída.

O modelo de preços é transparente e previsível:

  • Armazenamento em repouso: 0,015$ por GB/mês (cerca de 35% mais barato do que a AWS).
  • Transferência de dados de saída: 0,00$ por GB (totalmente grátis e ilimitada).
  • Operações de Escrita (Classe A): 4,50$ por milhão de pedidos.
  • Operações de Leitura (Classe B): 0,36$ por milhão de pedidos.

E o melhor de tudo é que o Cloudflare R2 é 100% compatível com a API do AWS S3. Não precisas de reescrever o teu código nem de aprender novas bibliotecas: continuas a usar o SDK oficial da AWS, apontando apenas o endereço do endpoint para a tua conta na Cloudflare.

ARQUITETURA DE MEDIA COM CLOUDFLARE R2

  • O Teu Servidor / API: Upload com o AWS S3 SDK → [Armazenamento R2]
  • (Tráfego Gratuito!)
  • Visitantes do Site: Entrega Rápida na Edge → [CDN media.empresa.pt]

Ao associares o R2 à rede global de distribuição de conteúdos da Cloudflare, os ficheiros solicitados com frequência ficam guardados na memória dos servidores de Lisboa e Madrid, respondendo em 3 milissegundos sem gastar operações de leitura no bucket.

Como Usar o Cloudflare R2 em Node.js com o SDK Oficial da AWS

Vê como podes implementar esta ligação de forma simples em Node.js utilizando o pacote padrão @aws-sdk/client-s3:

// src/services/armazenamento.ts
import { S3Client, PutObjectCommand, GetObjectCommand } from '@aws-sdk/client-s3';
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';

const ACCOUNT_ID = process.env.CLOUDFLARE_ACCOUNT_ID!;
const R2_ACCESS_KEY = process.env.R2_ACCESS_KEY_ID!;
const R2_SECRET_KEY = process.env.R2_SECRET_ACCESS_KEY!;
const BUCKET = process.env.R2_BUCKET_NAME || 'media-producao';

// Inicializa o cliente padrão da AWS apontado para o endpoint do R2
export const clienteR2 = new S3Client({
  region: 'auto',
  endpoint: `https://${ACCOUNT_ID}.r2.cloudflarestorage.com`,
  credentials: {
    accessKeyId: R2_ACCESS_KEY,
    secretAccessKey: R2_SECRET_KEY,
  },
});

export async function carregarFicheiro(
  buffer: Buffer,
  caminhoDestino: string,
  tipoMime: string
): Promise<string> {
  const comando = new PutObjectCommand({
    Bucket: BUCKET,
    Key: caminhoDestino,
    Body: buffer,
    ContentType: tipoMime,
    CacheControl: 'public, max-age=31536000, immutable',
  });

  await clienteR2.send(comando);

  // Devolve o URL com domínio próprio da tua CDN
  return `https://media.x078.com/${caminhoDestino}`;
}

export async function gerarUrlUploadDireto(
  caminhoDestino: string,
  tipoMime: string
): Promise<string> {
  const comando = new PutObjectCommand({
    Bucket: BUCKET,
    Key: caminhoDestino,
    ContentType: tipoMime,
  });

  // O browser envia o ficheiro direto para o R2 sem sobrecarregar a tua API!
  return await getSignedUrl(clienteR2, comando, { expiresIn: 3600 });
}

Repara na vantagem da função gerarUrlUploadDireto: o telemóvel do teu cliente envia vídeos pesados diretamente para o bucket da Cloudflare, poupando a memória e a rede da tua API.

Integrar com Nginx e Servidores Próprios em HestiaCP

Podes combinar este armazenamento em nuvem com os teus próprios servidores dedicados geridos em HestiaCP ou Debian.

No teu Nginx, configuras um proxy reverso transparente para o teu bucket:

# /etc/nginx/conf.d/proxy_media.conf

server {
    listen 443 ssl http2;
    server_name media.x078.com;

    # Certificados SSL Let's Encrypt geridos automaticamente
    ssl_certificate /etc/letsencrypt/live/media.x078.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/media.x078.com/privkey.pem;

    location / {
        proxy_pass https://pub-9f8e7d6c5b4a392817.r2.dev;
        proxy_set_header Host pub-9f8e7d6c5b4a392817.r2.dev;
        proxy_hide_header x-amz-request-id;
        
        # Cache agressiva de longo prazo no navegador
        add_header Cache-Control "public, max-age=31536000, immutable" always;
        add_header X-Content-Type-Options "nosniff" always;
    }
}

Esta arquitetura híbrida assegura que os teus websites de alta performance carregam imagens a velocidade instantânea sem que a fatura cloud dispare no final do mês. Podes consultar mais projetos de integração no GitHub.

Boas Práticas Operacionais: Permissões de Chaves e Regras de Limpeza

Seguindo os padrões comprovados na WebXtek, deves aplicar estas três recomendações essenciais:

  1. Limita as Permissões das Chaves de API: Nunca uses tokens globais de administrador no código das tuas aplicações. No painel da Cloudflare, cria chaves de acesso restritas exclusivamente à escrita e leitura no bucket específico do projeto.
  2. Configura Regras de Limpeza de Ficheiros Temporários: Não guardes exportações temporárias de utilizadores para sempre. Define regras de ciclo de vida no R2 para apagar automaticamente ficheiros da pasta tmp/ ao fim de 7 dias.
  3. Cuidado com Listagens Repetidas de Ficheiros: Se a tua aplicação fizer milhões de operações LIST ou HEAD no bucket, os custos de operações de Classe A podem subir. Guarda os nomes e caminhos dos ficheiros na tua base de dados PostgreSQL para pesquisares localmente em milissegundos.

Ao livrares a infraestrutura da tua empresa das taxas de tráfego da AWS S3 e adotares o Cloudflare R2 com cache na borda, ganhas tranquilidade financeira e eliminas faturas surpresa para sempre. Se precisas de ajuda para migrar dados com zero paragens de serviço, a nossa equipa de consultoria técnica está à tua disposição.

Na prática, aplicas exatamente estes padrões operacionais em setores exigentes como saas empresarial b2b e provedores de cloud computing e iaas. Quando alinhas a tua estrutura através de alojamento gerido para websites e aplicações e websites de alta performance, transformas boas práticas técnicas numa vantagem competitiva real e mensurável para o teu negócio.

[+] [ INDEX_DIRECTORY ] 13 tópicos ▼
[ SYSTEM.FAQ ]

Perguntas Frequentes

O que são as taxas de tráfego de saída (egress fees) na AWS S3?

Enquanto guardar dados no S3 custa cerca de 0,023€ por GB ao mês, transferir esses dados para a internet pública custa entre 0,05€ e 0,09€ por GB. Em aplicações com muitas fotos ou vídeos, o custo da transferência de saída representa habitualmente mais de 80% de toda a fatura cloud.

Como é que o Cloudflare R2 elimina as taxas de transferência de dados?

O Cloudflare R2 adota um modelo pioneiro de tráfego de saída gratuito (zero egress). Pagas apenas pelo espaço ocupado em disco (0,015$/GB/mês) e operações de leitura/escrita. Podes transferir terabytes ou petabytes para a internet sem pagar um único cêntimo de tráfego.

O Cloudflare R2 funciona com as bibliotecas e ferramentas do AWS S3?

Sim. O R2 implementa a especificação oficial da API do S3. Podes usar o SDK oficial da AWS para Node.js, Python ou ferramentas como o rclone simplesmente mudando o endereço do endpoint para o URL da tua conta Cloudflare.

Como é que o uso de um domínio personalizado na Cloudflare reduz ainda mais os custos?

Ao associares um domínio próprio (como media.empresa.pt) ao bucket do R2 com a cache da Cloudflare ativada, os ficheiros são servidos a partir da memória dos servidores edge em 3ms. Os pedidos em cache não pagam operações de leitura ao R2, garantindo velocidade máxima a custo quase zero.

> INICIAR_PROJETO

Precisa de um website que transmita confiança, apareça na pesquisa e dê mais força à sua presença digital? Comece a conversa aqui.