Como migrar do S3 para o R2 e reduzir os custos em até 90%

Ao conferir a conta da AWS, encontrei apenas $230 em armazenamento, mas nada menos que $4.500 em transferência de dados. Quando 50 TB começam a circular, o orçamento encolhe depressa. Conversei com amigos que mantêm plataformas de vídeo e serviços de hospedagem de imagens, e todos sentem o peso da saída de dados do S3. Um deles, responsável por um SaaS com 10 TB de tráfego mensal, pagava $891 no S3; o armazenamento custava só $15, e a transferência representava 98% da conta.
E se os dados forem para o Cloudflare R2? Não há cobrança pela saída. Com os mesmos 10 TB de tráfego, o R2 cobra apenas $15 pelo armazenamento. A seguir, comparo custos de cenários reais, mostro o que funciona na API compatível com o S3, explico uma migração de 30 minutos e aponto os problemas que encontrei. Se o aplicativo transfere mais de 500 GB por mês, a economia anual pode chegar a milhares ou dezenas de milhares de dólares.
Por que migrar do S3 para o R2? Os números explicam
A armadilha dos custos ocultos do S3
A estrutura de preços da AWS pode enganar. Os $0,023/GB de armazenamento parecem baratos e, no início, você pensa que fez um bom negócio. Quando o tráfego aumenta, porém, a saída de dados por $0,09/GB passa a dominar a conta.
Veja um exemplo. Imagine uma plataforma de vídeo que armazena 10 TB e transfere 50 TB por mês para visualizações e downloads:
- Armazenamento: 10 TB × $23/TB = $230/mês
- Transferência: 50 TB × $90/TB = $4.500/mês
- Total: $4.730/mês
A transferência representa 95% do total. E esse cálculo usa $0,09/GB; clientes com pouco volume nem sequer recebem descontos.
Um conhecido que mantém um serviço de hospedagem de imagens transfere 20 TB por mês e gastava $20.676 por ano no S3. Segundo ele, o armazenamento custava só $276; todo o restante era transferência de dados. Parecia que trabalhava apenas para pagar a AWS.
Onde está a vantagem de custo do R2
O principal diferencial do Cloudflare R2 é simples: não há cobrança por saída de dados.
Não é um desconto. A tarifa é zero. Você pode transferir 1 TB ou 100 TB e continuará pagando $0 por essa saída. Para aplicativos com tráfego intenso, isso muda completamente a conta.
Os custos se dividem assim:
- Armazenamento: $0,015/GB, ou $15/TB, 35% menos que o S3
- Saída de dados: $0, contra $90/TB no S3
- Operações: $4,50 por milhão de operações Class A e $0,36 por milhão de operações Class B
O R2 também oferece uma franquia gratuita:
- 10 GB de armazenamento
- 1 milhão de operações Class A, como gravações e listagens
- 10 milhões de operações Class B, como leituras
Um blog pessoal ou projeto pequeno pode ficar inteiramente dentro dessa franquia.
Comparação de três casos reais
Organizei três cenários típicos para comparar os custos:
| Cenário | Armazenamento | Tráfego mensal | Custo mensal no S3 | Custo mensal no R2 | Economia anual |
|---|---|---|---|---|---|
| Blog pessoal | 50 GB | 500 GB | $50 | $0,75 | $591 |
| Aplicativo SaaS | 1 TB | 10 TB | $923 | $15 | $10.896 |
| Plataforma de vídeo | 10 TB | 50 TB | $4.730 | $150 | $54.960 |
No cenário de SaaS, a mesma carga custa $10.896 a menos por ano no R2. Para uma startup, isso pode equivaler ao salário anual de uma pessoa desenvolvedora em início de carreira.
A plataforma de vídeo economiza ainda mais: $54.960 por ano. Esse valor pode financiar divulgação ou novas contratações.
Quando não vale a pena migrar
Depois de tantas vantagens, também é importante mostrar quando o R2 não é uma boa escolha:
- Forte dependência do ecossistema AWS: se o aplicativo usa intensamente Lambda, Athena, EMR e outros serviços da AWS, a mudança para o R2 pode exigir muitas alterações e não compensar.
- Necessidade de recursos avançados de conformidade: o S3 oferece Object Lock e Legal Hold, recursos que podem ser obrigatórios nos setores financeiro e de saúde. O R2 ainda não os oferece.
- Tráfego muito baixo: se o tráfego mensal for inferior a 100 GB, a economia pode ser pequena. Talvez seja melhor concentrar os esforços no produto.
- Requisitos rígidos de localização dos dados: o S3 permite escolher entre 33 regiões. O R2 oferece location hint, mas tem menos opções. Se os dados precisam ficar em um país específico, como China ou Rússia, confirme primeiro se o R2 atende ao requisito.
Meu critério é simples: se o tráfego mensal supera 500 GB, o retorno da migração tende a compensar. Abaixo disso, a decisão depende da sensibilidade do negócio a custos.
Compatibilidade entre as APIs do R2 e do S3: o que funciona e onde ter cuidado
Até que ponto o R2 é compatível
Esta é a principal dúvida: migrar para o R2 pode derrubar o aplicativo? Quanto código precisa mudar?
Nos meus testes, a conclusão foi esta: o R2 implementa de 80% a 90% dos principais recursos da API do S3, cobrindo praticamente todas as operações comuns.
A estratégia da Cloudflare foi implementar as partes mais usadas da API do S3, incluindo:
- Operações básicas: PutObject, GetObject, DeleteObject e ListObjects, que representam 99% dos casos de uso
- Recursos avançados: Multipart Upload, Presigned URLs e configuração de CORS
- Gerenciamento de permissões: Bucket policies e IAM-style access keys
O melhor é que normalmente basta alterar a URL do endpoint e as credentials. Quase todo o código permanece igual.
Em um projeto que usava o AWS SDK for JavaScript, troquei apenas três linhas para migrar ao R2:
// Configuração original do S3
const s3 = new AWS.S3({
region: 'us-east-1'
});
// Migração para o R2: altere apenas endpoint e credentials
const r2 = new AWS.S3({
endpoint: `https://${ACCOUNT_ID}.r2.cloudflarestorage.com`,
accessKeyId: R2_ACCESS_KEY_ID,
secretAccessKey: R2_SECRET_ACCESS_KEY,
signatureVersion: 'v4',
});
O restante do código de upload, download e exclusão continuou igual. Testei a configuração por duas semanas e não encontrei problemas de compatibilidade.
Recursos sem suporte
O R2 não substitui o S3 em todos os casos. Alguns recursos realmente não são compatíveis, e você deve confirmar se o aplicativo depende deles antes de migrar.
1. S3 Select, para consultas SQL em objetos
O R2 não oferece S3 Select. Se você executa consultas SQL diretamente sobre objetos no S3, terá de baixar os dados antes de consultar ou adotar outra solução.
2. Object Lock e Legal Hold, para retenção de conformidade
Esses recursos são comuns nos setores financeiro e de saúde para atender a requisitos WORM, ou Write Once Read Many. O R2 ainda não os oferece. Se a auditoria de conformidade os exige, não migre.
3. Versioning, para controle de versões
O suporte do R2 ao versionamento do S3 é limitado. Aplicativos que dependem muito da restauração de versões precisam de testes cuidadosos.
4. Alguns recursos avançados de consulta e análise
S3 Inventory e S3 Object Lambda, por exemplo, não são compatíveis com o R2.
Minha recomendação é direta: antes de migrar, liste todos os recursos do S3 usados pelo aplicativo e compare-os com a documentação oficial de compatibilidade da Cloudflare. A maioria dos aplicativos utiliza apenas as operações básicas e não terá problemas.
Compatibilidade das ferramentas nos testes
Testei algumas ferramentas comuns, e quase todas puderam ser trocadas sem dificuldade:
| Ferramenta | Compatibilidade | Observação |
|---|---|---|
| AWS CLI | ✅ Completa | Basta configurar o endpoint |
| rclone | ✅ Completa | Suporte nativo ao R2 a partir da versão 1.59 |
| s3cmd | ✅ Completa | Basta alterar o arquivo de configuração |
| AWS SDK (JS/Python/Go) | ✅ Completa | Altere endpoint e credentials |
| Cyberduck | ✅ Completa | Ferramenta gráfica com suporte ao R2 |
O único cuidado é usar o rclone 1.59 ou mais recente. Versões antigas apresentam problemas de autenticação.
Um problema que encontrei
Em uma das migrações, o aplicativo usava a API ListObjectsV2 do S3 com o parâmetro StartAfter para paginação. Depois da troca para o R2, a paginação se comportou de maneira um pouco diferente e alguns dados deixaram de aparecer.
Ao investigar, confirmei que a paginação do R2 não era idêntica à do S3. Troquei o parâmetro por ContinuationToken, e o problema desapareceu.
A lição é simples: teste bastante depois da migração. Não valide apenas o fluxo normal; cubra também os casos de limite.
Três estratégias de migração: escolha a mais adequada
A Cloudflare oferece duas ferramentas oficiais, Super Slurper e Sippy, e a comunidade mantém opções de código aberto como o rclone. A escolha depende do cenário.
Opção 1: Super Slurper para uma migração pontual
O Super Slurper é a ferramenta oficial da Cloudflare para uma migração única. Ele serve para quem quer transferir todos os dados de uma vez.
Vantagens:
- Operação simples: preencha alguns formulários e inicie a migração
- Preserva todos os metadados, incluindo metadata e content-type
- Não exclui os dados de origem, reduzindo o risco
- É gratuito; você paga apenas as operações Class A do R2, que custam pouco
- Depois da atualização de 2024, ficou cinco vezes mais rápido
Limitações:
- Faz apenas uma migração pontual, sem sincronização incremental
- Se usuários enviarem novos arquivos ao S3 durante a migração, eles não serão sincronizados automaticamente com o R2
- É mais adequado quando cada objeto tem menos de 50 GB; arquivos muito grandes podem causar problemas
Para quem serve:
- Volumes inferiores a 10 TB
- Projetos que aceitam uma breve indisponibilidade ou ainda não estão em produção
- Aplicativos que deixarão completamente o S3 depois da migração
Usei o Super Slurper no meu primeiro projeto migrado. Foram cerca de 30 minutos para transferir 100 GB. Reservei uma janela de manutenção às 3h, e os usuários praticamente não perceberam.
Opção 2: Sippy para migração gradual sem indisponibilidade
O Sippy é a solução de migração inteligente da Cloudflare. Sua principal característica é não exigir uma parada do serviço.
Como funciona:
Você aponta o aplicativo para o R2. Quando alguém solicita um arquivo:
- O R2 procura o arquivo no próprio armazenamento
- Se encontrar, retorna imediatamente
- Se não encontrar, busca o arquivo no S3, entrega a resposta e salva uma cópia no R2 para a próxima solicitação
Assim, os dados são migrados sob demanda. Os arquivos mais acessados passam primeiro, enquanto os dados frios são transferidos aos poucos.
Vantagens:
- Não exige indisponibilidade e é transparente para o usuário
- Reduz a transferência no S3 à medida que os dados mais acessados passam para o R2
- Permite acompanhar a migração e voltar ao S3 caso o resultado não seja satisfatório
Limitações:
- O primeiro acesso a um arquivo é mais lento, pois o R2 precisa buscá-lo no S3
- A configuração é mais complexa e exige mudanças no aplicativo
- Funciona melhor quando há uma separação clara entre dados quentes e frios
Para quem serve:
- Ambientes de produção que não podem parar
- Volumes muito grandes, acima de 10 TB, cuja migração pontual demoraria demais
- Equipes que querem testar a estabilidade do R2 antes da troca completa
Um amigo que mantém um serviço de aceleração por CDN usou o Sippy para migrar 50 TB. O serviço continuou atendendo usuários enquanto os dados eram transferidos em segundo plano. A migração completa levou dois meses, mas não afetou a operação.
Opção 3: rclone para quem quer controle total
O rclone é uma ferramenta de código aberto para sincronização entre serviços de armazenamento. É a opção mais completa, mas exige o uso da linha de comando.
Vantagens:
- É totalmente gratuito e de código aberto
- Permite retomar transferências interrompidas
- Aceita sincronização agendada, como atualizações incrementais durante a madrugada
- Verifica a integridade dos dados com MD5 ou SHA256
- Permite limitar a velocidade para não ocupar toda a largura de banda
Limitações:
- Exige familiaridade com a linha de comando
- Você precisa criar scripts para gerenciar o andamento da migração
- A transferência gera custos de saída no S3, embora a AWS tenha deixado de cobrar por dados migrados para fora desde março de 2024
Para quem serve:
- Equipes técnicas que querem controlar todo o processo
- Projetos que precisam de sincronização contínua, como um período com gravação simultânea no S3 e no R2
- Cenários com requisitos rigorosos de integridade dos dados
Eu prefiro o rclone porque posso automatizar tudo com scripts e acompanhar logs detalhados. Este foi um dos comandos que usei:
rclone copy s3:my-bucket r2:my-bucket \
--progress \
--checksum \
--transfers 32 \
--s3-chunk-size 64M
O parâmetro --checksum verifica o MD5 de cada arquivo para confirmar a integridade. Já --transfers 32 abre 32 transferências simultâneas e aumenta bastante a velocidade.
Decisão rápida: qual opção escolher?
Use esta árvore de decisão:
É possível parar o serviço?
├─ Sim → Há menos de 10 TB?
│ ├─ Sim → Super Slurper, a opção mais simples
│ └─ Não → rclone, rápido e controlável
└─ Não → Sippy, sem indisponibilidade
Conhecimento técnico + necessidade de controle total → rclone
Minha recomendação é que o Super Slurper basta para a maioria dos casos. A simplicidade costuma valer mais do que a flexibilidade das outras opções, exceto quando o serviço não pode parar nem por um instante ou o volume é muito grande, acima de 50 TB.
Migração completa do S3 para o R2 com o Super Slurper
Conclua uma migração de baixo risco em 30 minutos, da preparação à validação e à troca do aplicativo
Estimated time: PT30M
-
1
Step 1: Preparação: crie o R2 e o usuário IAM
Etapas de preparação: -
2
Step 2: Executar a migração: configure o Super Slurper
Etapas da migração: -
3
Step 3: Aguardar o término da transferência
Acompanhe o andamento: -
4
Step 4: Validar o resultado
Validação da migração: -
5
Step 5: Trocar o aplicativo para o R2
Etapas da troca:
Migração prática em 30 minutos com o Super Slurper
Com a teoria resolvida, vamos à configuração. Usarei o Super Slurper como exemplo. A preparação leva cerca de 30 minutos; o tempo de transferência dos dados vem depois.
Etapa 1: preparação em 5 minutos
1. Crie uma conta na Cloudflare e ative o R2
Acesse o painel da Cloudflare, crie uma conta e encontre “R2 Object Storage” na barra lateral para ativar o serviço.
O R2 exige um cartão de crédito, mas oferece uma franquia gratuita. Um projeto pequeno pode não pagar nada.
2. Crie um bucket no R2
Clique em “Create bucket” e preencha:
- Bucket name, de preferência igual ao bucket no S3 para facilitar o gerenciamento
- Location hint; escolha EU se houver um requisito de conformidade, ou Automatic nos demais casos
⚠️ Importante: location hint e jurisdictional restrictions não podem ser alterados depois da escolha. Avalie com cuidado. Automatic é suficiente na maioria dos casos.
3. Crie um usuário IAM somente leitura na AWS
Esta etapa é importante. Não use as chaves da conta principal, pois o risco de segurança é alto.
No console do AWS IAM, siga Users → Add User:
- Nome de usuário:
r2-migration-readonly - Access type: Programmatic access
- Permissions: Attach existing policies directly → selecione “AmazonS3ReadOnlyAccess”
Outra opção é usar uma política personalizada, mais segura por limitar a permissão ao bucket necessário:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::your-bucket-name",
"arn:aws:s3:::your-bucket-name/*"
]
}
]
}
Depois da criação, a AWS exibirá o Access Key ID e o Secret Access Key. Copie e salve ambos, porque eles aparecem apenas uma vez.
4. Gere um R2 API Token
Volte ao R2 e siga Manage R2 API Tokens → Create API Token:
- Nome do token:
migration-token - Permissions: Object Read & Write
- Selecione o bucket criado anteriormente
O R2 também mostrará um Access Key ID e um Secret Access Key. Salve-os.
Etapa 2: configuração da migração em 15 minutos
1. Abra a área Data Migration
No painel do R2, clique em “Data Migration” → “Migrate Files”, no canto superior direito.
2. Selecione Super Slurper
Você verá Super Slurper e Sippy. Selecione Super Slurper para fazer uma migração pontual.
3. Preencha os dados do bucket de origem no S3
- Provider: Amazon S3
- Bucket name: o nome do bucket no S3, como
my-images - Bucket region: a região do S3, como
us-east-1, disponível no console do S3 - Access Key ID: a chave do usuário IAM criado anteriormente
- Secret Access Key: o Secret Key correspondente
Clique em “Verify Connection”. Uma marca verde aparecerá se a conexão funcionar.
4. Preencha os dados do bucket de destino no R2
- Bucket name: o nome do bucket criado no R2
- R2 Access Key ID: o Access Key do R2 API Token
- R2 Secret Access Key: o Secret correspondente
5. Configure as opções de migração
- Overwrite existing objects: define se arquivos existentes serão substituídos; recomendo marcar
- Path prefix, opcional: informe um prefixo, como
images/, se quiser migrar apenas uma pasta do S3
6. Revise e inicie a migração
Confira toda a configuração e clique em “Start Migration”.
7. Aguarde o término da transferência
O painel mostrará:
- Velocidade de transferência
- Quantidade de arquivos migrados
- Tempo restante estimado
Estimativas de tempo:
- 100 GB → cerca de 30 minutos
- 1 TB → cerca de 4 a 6 horas
- 10 TB → cerca de 2 a 3 dias
Você pode fechar a página; a migração continuará em segundo plano. Volte a qualquer momento para acompanhar o andamento.
Etapa 3: validação em 10 minutos
Quando a migração terminar, não exclua imediatamente os dados do S3. Valide tudo primeiro.
1. Confira a quantidade de objetos
Abra o bucket no painel do R2 e compare:
- Quantidade de objetos no S3: X
- Quantidade de objetos no R2: X
Os números devem ser iguais. Se não forem, consulte os logs para identificar falhas de migração.
2. Verifique a integridade de alguns arquivos
Baixe alguns arquivos aleatórios e compare o MD5:
# MD5 do arquivo no S3
aws s3api head-object --bucket my-bucket --key test.jpg --query 'ETag' --output text
# MD5 do arquivo no R2, usando rclone ou baixando para comparar
rclone md5sum r2:my-bucket/test.jpg
Se os ETags forem iguais, o arquivo está íntegro.
3. Teste o acesso aos arquivos
Abra alguns arquivos pela Public URL ou pela API do R2 e confirme que o download funciona.
4. Confira os metadados
Verifique se os campos metadata personalizados foram preservados:
aws s3api head-object --bucket my-bucket --key test.jpg
# Compare com os metadados no R2
Etapa 4: troca do aplicativo para o R2
Depois da validação, você pode começar a apontar o aplicativo para o R2. Faça uma liberação gradual em vez de trocar todo o tráfego de uma vez.
1. Altere a configuração do aplicativo
Imagine que o aplicativo configure o S3 por variáveis de ambiente:
# Configuração original do S3
S3_ENDPOINT=https://s3.amazonaws.com
S3_BUCKET=my-bucket
S3_ACCESS_KEY=xxx
S3_SECRET_KEY=xxx
S3_REGION=us-east-1
# Configuração do R2
S3_ENDPOINT=https://YOUR_ACCOUNT_ID.r2.cloudflarestorage.com
S3_BUCKET=my-bucket
S3_ACCESS_KEY=R2_xxx
S3_SECRET_KEY=R2_xxx
S3_REGION=auto # Use auto no R2
2. Faça uma liberação gradual
Comece com 10% do tráfego e procure erros:
- Confira os logs do aplicativo
- Monitore a taxa de erros
- Acompanhe o retorno dos usuários
Se tudo estiver estável, aumente gradualmente: 10% → 50% → 100%.
3. Monitore os principais indicadores
Depois da migração, acompanhe de perto:
- Taxa de erros da API
- Tempo de resposta
- Custos de transferência, que devem cair bastante
4. Mantenha um backup no S3
Recomendo manter os dados no S3 por 30 dias e excluí-los apenas depois de confirmar a estabilidade do R2. Desde março de 2024, a AWS não cobra pela transferência de dados migrados para fora, portanto essa saída não tem custo.
Você pode configurar uma regra de ciclo de vida no S3 para fazer a limpeza automática:
{
"Rules": [
{
"Status": "Enabled",
"Expiration": {
"Days": 30
}
}
]
}
Todos os objetos serão excluídos automaticamente depois de 30 dias.
Como otimizar e monitorar o R2 depois da migração
A migração não encerra o trabalho. Ela abre espaço para melhorar desempenho e custo.
Otimização de desempenho
1. Ative a CDN da Cloudflare
O R2 já usa a rede global da Cloudflare, mas funciona ainda melhor com a CDN:
- Abra as configurações do bucket no R2 → Public Access → Connect Domain
- Vincule seu domínio, que precisa estar gerenciado pela Cloudflare
- O cache da CDN será ativado automaticamente
Assim, o conteúdo será entregue pelo ponto da CDN mais próximo do usuário.
2. Configure um Cache-Control adequado
Defina o header Cache-Control ao enviar um arquivo para informar por quanto tempo a CDN deve mantê-lo em cache:
// Recursos estáticos, como imagens e vídeos, ficam em cache por um ano
s3.upload({
Bucket: 'my-bucket',
Key: 'image.jpg',
Body: fileBuffer,
CacheControl: 'public, max-age=31536000, immutable'
});
// Conteúdo atualizado com frequência fica em cache por uma hora
s3.upload({
// ...
CacheControl: 'public, max-age=3600'
});
3. Use um domínio personalizado no R2
A URL padrão do R2 não é amigável: https://xxx.r2.cloudflarestorage.com/file.jpg.
Com um domínio personalizado, ela pode ficar assim: https://cdn.yoursite.com/file.jpg.
Além de ser mais legível, a URL personalizada pode oferecer melhor desempenho com a CDN.
Otimização de custos
1. Use a classe Infrequent Access para dados frios
O R2 oferece a classe de armazenamento Infrequent Access, ou IA, para dados acessados com pouca frequência:
- O armazenamento é mais barato: $0,01/GB, contra $0,015/GB na classe Standard
- Cada leitura tem uma cobrança adicional de $0,01/GB
Ela é indicada para arquivos históricos, backups e outros dados frios.
2. Ajuste o part size do Multipart Upload
Em uploads grandes, o part size influencia o custo das operações Class A. Cada parte enviada conta como uma operação:
- Part size pequeno demais → mais operações → custo maior
- Part size grande demais → retransmissões mais caras em caso de falha
Minha recomendação:
- Arquivos menores que 100 MB → upload único
- Arquivos de 100 MB a 1 GB → part size de 64 MB
- Arquivos maiores que 1 GB → part size de 128 MB
No rclone, use:
rclone copy s3:bucket r2:bucket --s3-chunk-size 64M
3. Monitore o custo das operações Class A e Class B
A saída de dados é gratuita, mas as operações têm custo:
- Class A, para gravações: $4,50 por milhão
- Class B, para leituras: $0,36 por milhão
O painel do R2 mostra a quantidade mensal de operações. Se houver operações Class A em excesso, procure uploads duplicados ou solicitações desnecessárias.
Monitoramento para detectar problemas rapidamente
1. Cloudflare Analytics
O R2 inclui o Analytics, que mostra:
- Quantidade de solicitações
- Volume de dados
- Taxa de erros
- Arquivos mais acessados
Abra o bucket no R2 e acesse Analytics.
2. Alertas de custo
Defina um limite para receber uma notificação automática:
Cloudflare Dashboard → Notifications → Add → selecione “R2 storage usage”.
Você pode, por exemplo, configurar um e-mail quando o custo mensal superar $50 e evitar surpresas na conta.
3. Monitoramento no aplicativo
Monitore estes indicadores do R2 no aplicativo:
- Taxa de erros da API, com meta inferior a 0,1%
- Tempo médio de resposta, com meta inferior a 100 ms
- Latência P99, com meta inferior a 500 ms
Use ferramentas de APM como Sentry ou Datadog para detectar problemas e reverter rapidamente.
4. Compare periodicamente com o custo do S3
Todo mês, compare:
- A conta do S3 antes da migração
- A conta do R2 depois da migração
- O valor economizado, que pode até pagar um almoço para a equipe 😄
Eu mantenho uma planilha com esses números. Ver a economia acumulada mês a mês dá uma boa sensação de progresso.
Conclusão: vale a pena migrar para o R2?
Minha resposta é: se o aplicativo transfere mais de 500 GB por mês, migrar para o R2 vale muito a pena.
As três principais vantagens são:
- A economia é real: sem tarifa de saída, a conta de nuvem pode cair de 50% a 90%. Um SaaS pode economizar mais de $10.000 por ano, e uma plataforma de vídeo pode passar de $50.000.
- A migração é administrável: o Super Slurper leva 30 minutos para configurar, e o R2 oferece de 80% a 90% de compatibilidade com a API. Na maioria dos aplicativos, basta alterar o endpoint. Meus testes mostraram que a mudança é menos complexa do que parece.
- O risco pode ser controlado: a migração não exclui a origem. Você pode liberar o tráfego gradualmente e voltar atrás se algo der errado. Como a AWS não cobra mais pela saída dos dados migrados, o custo de experimentar é quase zero.
Mas o R2 não resolve todos os casos:
- Se o aplicativo depende muito do ecossistema AWS, como Lambda e Athena, a migração pode sair cara
- Se você precisa de recursos avançados de conformidade do S3, como Object Lock, o R2 ainda não é suficiente
- Se o tráfego é muito baixo, inferior a 100 GB por mês, o retorno da migração é pouco relevante
Minha recomendação é testar primeiro o desempenho e a estabilidade com a franquia gratuita do R2 e só então migrar em grande escala. Para uma transição gradual, o Sippy oferece o menor risco.
Um último caso ajuda a mostrar o impacto. Um amigo mantinha um serviço de hospedagem de imagens e pagava $1.800 por mês no S3. Depois da migração, passou a gastar apenas $18 no R2, referentes ao armazenamento. Ele usou a economia para contratar uma pessoa de design e melhorar o produto. Esse é o valor da otimização de custos: não apenas gastar menos, mas direcionar o dinheiro para o que produz mais resultado.
Próximos passos:
- Use a calculadora do R2 para estimar sua economia
- Teste o desempenho do R2 com a franquia gratuita
- Escolha uma estratégia: Super Slurper, Sippy ou rclone
- Faça uma migração gradual e valide a estabilidade
- Transfira todo o tráfego e acompanhe a redução dos custos
Se encontrar algum problema durante a migração, compartilhe nos comentários. Boa migração e uma conta bem menor!
FAQ
Quanto é possível economizar ao migrar do S3 para o R2?
Aplicativo SaaS (1 TB de armazenamento e 10 TB de tráfego):
• S3 custa $923 por mês, R2 custa $15 por mês, economia anual de $10.896
Plataforma de vídeo (10 TB de armazenamento e 50 TB de tráfego):
• Economia anual de $54.960
Análise de custos:
• A transferência representa 95% do custo do S3 (10 TB de armazenamento por $230/mês e 50 TB de tráfego por $4.500/mês)
• O R2 não cobra por saída de dados e o armazenamento custa $15/TB (35% mais barato que o S3)
Critério de decisão:
• Vale a pena migrar quando o tráfego mensal supera 500 GB
• Com tráfego muito baixo (menos de 100 GB/mês), o retorno da migração é pouco relevante
Qual é o nível de compatibilidade entre as APIs do R2 e do S3?
Recursos compatíveis:
• Operações básicas (PutObject/GetObject/DeleteObject/ListObjects) têm suporte completo
• Recursos avançados (Multipart Upload, Presigned URLs e configuração de CORS) são compatíveis
• Gerenciamento de permissões (Bucket policies e IAM-style access keys) é compatível
Basta alterar a URL do endpoint e as credentials; quase não é preciso mexer no código.
Recursos não compatíveis:
• S3 Select
• Object Lock e Legal Hold
• Suporte limitado a Versioning
• S3 Inventory e S3 Object Lambda
Antes da migração, liste os recursos do S3 usados pelo aplicativo e confira cada um na documentação de compatibilidade.
Como escolher uma estratégia de migração?
1) Super Slurper (recomendado para iniciantes e migrações pontuais):
• Indicado para menos de 10 TB, quando uma breve indisponibilidade é aceitável e a troca para o R2 será definitiva
• Operação simples, preserva metadados e não exclui os dados de origem
• Cerca de 30 minutos para 100 GB
2) Sippy (migração gradual sem indisponibilidade):
• Indicado para produção sem janela de parada, mais de 10 TB ou quando se quer testar a estabilidade antes da troca completa
• O usuário não percebe a migração, e os dados mais acessados são transferidos primeiro, sob demanda
3) rclone (a opção mais flexível):
• Indicado para equipes técnicas, sincronização contínua ou requisitos rigorosos de integridade
• Oferece retomada, sincronização agendada e verificação de integridade
Árvore de decisão:
• Se puder parar e tiver menos de 10 TB, escolha Super Slurper
• Se não puder parar, escolha Sippy
• Se quiser controle total e tiver conhecimento técnico, escolha rclone
Como executar uma migração com o Super Slurper?
• Crie uma conta na Cloudflare, ative o R2 e crie um bucket no R2
• Crie no AWS um usuário IAM somente leitura (r2-migration-readonly, com AmazonS3ReadOnlyAccess)
• Gere um R2 API Token (Object Read & Write)
Execução:
1. Acesse R2 → Data Migration → Migrate Files
2. Selecione Super Slurper
3. Preencha os dados do bucket de origem (Provider: Amazon S3, Bucket name, region e Access Key)
4. Preencha os dados do bucket de destino (Bucket name e R2 Access Key)
5. Configure as opções de migração (é recomendável marcar Overwrite existing objects)
6. Revise e clique em Start Migration
Estimativa de tempo:
• 100 GB: cerca de 30 minutos
• 1 TB: cerca de 4 a 6 horas
• 10 TB: cerca de 2 a 3 dias
Como validar a migração e trocar o aplicativo para o R2?
• Confira a quantidade de objetos (deve ser igual no S3 e no R2)
• Verifique a integridade de alguns arquivos (compare o MD5: consulte o ETag com aws s3api head-object e compare o R2 com rclone md5sum)
• Teste o acesso aos arquivos e confira os metadados
Troque o aplicativo:
• Altere a configuração (S3_ENDPOINT para o endpoint do R2, S3_ACCESS_KEY e S3_SECRET_KEY para as chaves do R2, e S3_REGION para auto)
Liberação gradual:
• Aumente o tráfego em etapas: 10% → 50% → 100%
• Confira logs, monitore a taxa de erros e acompanhe o retorno dos usuários
Monitore os principais indicadores:
• Taxa de erros da API, tempo de resposta e a esperada queda acentuada no custo de tráfego
Mantenha o backup no S3 por 30 dias e configure uma regra de ciclo de vida para removê-lo automaticamente.
Em quais casos não vale a pena migrar para o R2?
1) Forte dependência do ecossistema AWS:
• O uso intenso de Lambda, Athena, EMR e outros serviços da AWS pode tornar a migração cara
2) Necessidade de recursos avançados de conformidade:
• Object Lock e Legal Hold do S3 podem ser obrigatórios nos setores financeiro e de saúde; o R2 ainda não oferece esses recursos
3) Tráfego muito baixo:
• Com menos de 100 GB por mês, a economia é pequena e talvez seja melhor priorizar o produto
4) Requisitos rígidos de localização dos dados:
• O S3 oferece 33 regiões, enquanto o R2 tem menos opções; confirme antes se os dados precisam permanecer em um país específico
Critério de decisão:
• Acima de 500 GB por mês, o retorno da migração tende a compensar; abaixo disso, depende da sensibilidade a custos
• Teste primeiro o desempenho e a estabilidade com a franquia gratuita do R2 e só então faça uma migração em grande escala
Como otimizar o desempenho e o custo do R2 depois da migração?
1) Ative a CDN da Cloudflare:
• Em R2 bucket settings → Public Access → Connect Domain, vincule um domínio para ativar o cache da CDN
2) Configure um Cache-Control adequado:
• Armazene recursos estáticos em cache por um ano
• Armazene conteúdo atualizado com frequência por uma hora
3) Use um domínio personalizado no R2:
• Isso produz URLs melhores e pode melhorar o desempenho da CDN
Otimização de custos:
1) Use a classe Infrequent Access para dados frios:
• Armazenamento por $0,01/GB em vez dos $0,015/GB da classe Standard
• Indicado para arquivos históricos e backups
2) Ajuste o part size do Multipart Upload:
• Arquivos menores que 100 MB: upload único
• De 100 MB a 1 GB: 64 MB
• Acima de 1 GB: 128 MB
3) Monitore o custo das operações Class A/B:
• Gravações Class A: $4,50 por milhão
• Leituras Class B: $0,36 por milhão
Monitoramento:
• Use o Cloudflare Analytics para acompanhar solicitações e erros
• Configure alertas de custo
• Monitore a taxa de erros e o tempo de resposta da API no aplicativo
21 min de leitura · Publicado em: 1 dez 2025 · Atualizado em: 4 set 2026
Cloudflare Full Stack
Se você chegou pela busca, o caminho mais rápido é ir para o post anterior ou próximo desta série.
Anterior
Usa Cloudflare e ainda sofre ataques? 7 formas ocultas de vazar o IP de origem e como se proteger
Seu site usa Cloudflare, mas ainda sofre ataques DDoS? Conheça 7 formas ocultas de vazamento do IP de origem, como histórico de DNS, cabeçalhos de e-mail e subdomínios, além de ferramentas de detecção, configuração de firewall, boas práticas e medidas de correção.
Parte 9 de 13
Próximo
Como criar seu próprio encurtador de links com Workers + KV: do básico à prática
Um serviço de links curtos de terceiros encerrou as atividades e inutilizou centenas de links? Veja como criar seu próprio encurtador com Cloudflare Workers + KV, com códigos personalizados, estatísticas de acesso, implantação simples, aceleração global e custo zero.
Parte 11 de 13



Comentários
Entre com GitHub para comentar