Infrastructure and SEO

Cloudflare R2 vs S3 vs Supabase Storage en 2026: cuál elegir

Cloudflare R2 no cobra egress, S3 tiene el ecosistema más profundo, Supabase Storage oculta la fontanería. Cómo elegir para un SaaS de 2026 sin pagar de más.

22 de mayo de 20267 min de lectura
cable network

El object storage es un namespace plano de blobs no estructurados accesibles por HTTP, facturado por bytes almacenados y por tráfico. Tres opciones dominan la conversación práctica del SaaS en 2026: Cloudflare R2 (cero costes de egress), Amazon S3 (el original, el ecosistema más profundo) y Supabase Storage (servido por PostgREST e integrado con la row-level security). Los tres hablan la API de S3, los tres replican entre centros de datos, los tres facturan por GB. La diferencia aparece en el momento en que empiezas a sacar bytes.

TL;DR. Elige R2 cuando el egress domina la factura. Elige S3 cuando vives dentro de AWS o necesitas una función exclusiva de AWS. Elige Supabase Storage cuando los datos son pocos, ligados al auth y no quieres cablear un segundo servicio. Evita Supabase Storage como object store de propósito general. Evita R2 si dependes de Glacier o de certificados de cumplimiento específicos de una región AWS. Evita S3 si tu tráfico es mayoritariamente assets públicos.

Resumen de precios

EjeCloudflare R2Amazon S3 StandardSupabase StorageAlmacenamiento por GB / mes$0.015$0.023$0.021 (tras el tier gratuito)Egress hacia internet$0~$0.09 / GB~$0.09 / GB (tras lo incluido)Operaciones Class A (escrituras)$4.50 / millón$5.00 / millónContadas como peticiones al DBOperaciones Class B (lecturas)$0.36 / millón$0.40 / millónContadas como peticiones al DBCuota mensual gratuita10 GB almacenados, 10M lecturas, 1M escriturasNinguna en cuentas de pago1 GB en Free, 100 GB en ProCompatibilidad con API S3La mayor parte de v4, con huecosNativaSí, vía Storage v3 API

Las cifras son de tarifa, equivalentes a US-East, antes de descuentos por volumen. AWS reserved capacity, S3 Intelligent-Tiering y los planes enterprise de Supabase cambian las cuentas. Antes de firmar, compara contra tu forma real de tráfico.

Dónde gana Cloudflare R2

El titular es el egress. S3 cobra unos $0.09 por GB enviado al internet público. R2 no cobra nada. Para una plataforma de vídeo que sirve 100 TB de material a sus espectadores cada mes, esa es la diferencia entre una factura de $9.000 y una de $1.500, y la brecha crece de forma lineal con el tráfico. El propio anuncio de Cloudflare presentó R2 como un ataque directo a esa parte del modelo AWS. Dos años después, el precio aguanta.

R2 también cobra el almacenamiento a $0.015/GB/mes, un 35% más barato que S3 Standard. Para un marketplace con un millón de imágenes donde cada usuario pide la misma foto de producto a través de CDN una vez y nunca más, el ahorro en egress es limitado pero el almacenamiento suma mes a mes, y aun así sales ganando.

R2 habla la mayor parte de la API S3 v4, así que el código existente con AWS SDK funciona en gran medida cambiando endpoint y par de claves. Los huecos son reales pero manejables en la mayoría de cargas: no hay tier equivalente a Glacier, no hay ACL por objeto (usa políticas de bucket y signed URLs), no hay buckets multi-región al estilo AWS (R2 se distribuye automáticamente por la red de Cloudflare).

Dónde gana Amazon S3

S3 tiene veinte años y tiene el ecosistema más profundo de cualquier object store. Si tu pipeline de procesado lee de S3 vía Athena, Glue, EMR o triggers Lambda, salir de la región AWS cuesta más de lo que la diferencia de almacenamiento te ahorrará jamás. Mismo argumento con el cumplimiento: AWS tiene HIPAA, FedRAMP, IRAP y decenas de certificaciones por región que R2 no iguala línea a línea. Un banco en Frankfurt que necesita eu-central-1 con una atestación BSI concreta tiene una única opción realista.

S3 también ofrece funciones que R2 no. S3 Intelligent-Tiering mueve de forma automática los objetos poco accedidos a clases más baratas (hasta unos $0.004/GB/mes en Deep Archive), con una pequeña cuota de monitorización. Para un archivo de 50 TB de logs fríos que lees dos veces al año, Intelligent-Tiering más Deep Archive vencen con holgura a la tarifa plana de R2 de $0.015, incluso contando egress. Object Lambda, replicación S3 entre cuentas y S3 Batch Operations no tienen equivalente en R2 en 2026.

El truco es la factura de egress, y no aparece en desarrollo. Aparece cuando un vídeo de producto se comparte en redes y pagas cada descarga. Construye sobre S3, pero modela tu egress mensual antes de comprometerte.

Dónde gana Supabase Storage

Supabase Storage está detrás de PostgREST y comparte las mismas políticas de row-level security que tus tablas. Una access_policy sobre el objeto del storage hereda de la fila que lo referencia, así que un usuario logueado sólo puede descargar los archivos de su tenant sin una segunda capa de autorización. La superficie de API es el mismo cliente JS de Supabase que usas para las consultas: sin SDK extra, sin segundo flujo de rotación de claves, sin modelo IAM aparte.

Esa integración es el punto. Para una herramienta interna que guarda unos cuantos cientos de PDFs por tenant o un SaaS donde los usuarios suben avatares y CSVs, Supabase Storage quita un servicio de la pila. El plan Pro ($25/mes) incluye 100 GB de almacenamiento y 200 GB de egress, y cubre la cola larga de SaaS pequeños antes de que tengan que pensar en object storage como partida del presupuesto.

Pierde con claridad fuera de ese rango. Si almacenas más de unos cientos de GB o sacas más de unos TB de egress al mes, el precio por GB de Supabase se alinea con S3, y renuncias al ahorro en egress de R2 y a las opciones de tiering de S3 a cambio de la comodidad. La jugada correcta a esa escala es migrar los medios calientes a R2 y dejar los documentos privados del usuario en Supabase Storage. Lo hemos hecho con dos clientes SaaS en el último año.

Compatibilidad, migración y la trampa de la API S3

Los tres proveedores exponen una API con forma de S3, pero los bordes cambian. R2 se salta las signed POST policies (usa signed URLs en su lugar), y el TTL de las URLs prefirmadas está limitado a 7 días donde S3 permite configurar topes más amplios. El endpoint S3 v3 de Supabase Storage es opt-in por proyecto y encierra algunas operaciones detrás del cliente JS de Supabase. El AWS SDK para JavaScript funciona contra R2 y Supabase con endpoint custom, pero boto3 en Python lleva años tropezando en silencio con la semántica del Conditional PUT de R2. Antes de dar por hecha la paridad, consulta el rastreador de bugs.

Las migraciones entre los tres están limitadas por ancho de banda, no por API. rclone con backends compatibles con S3 maneja los tres, y Super Slurper de Cloudflare existe específicamente para tirar buckets de S3 hacia R2 sin pagar doble egress. El impuesto oculto de la migración es cualquier código escrito contra funciones específicas de AWS: lifecycle rules, S3 Select, Object Lambda, topología de replicación. Reescribe ese código antes de empezar a copiar objetos, no durante.

Qué enviamos por defecto en 2026

Para un SaaS Next.js nuevo donde la base de datos es Supabase y esperamos una mezcla de subidas pequeñas de usuario (avatares, adjuntos) y medios públicos grandes (vídeos, imágenes servidas por CDN), el stack por defecto son dos buckets. Supabase Storage para todo lo ligado a un usuario logueado donde el join con la RLS importa: fotos de perfil, subidas de documentos, CSVs con alcance por tenant. R2 detrás de un CDN Cloudflare custom para todo lo que se sirve a la masa: imágenes de marketing, fotos públicas de producto, assets de vídeo, recursos descargables.

S3 entra en escena en dos casos. Clientes existentes ya en AWS que necesitan un store en la misma región junto a su pipeline de procesado con Lambda, y cargas reguladas donde una certificación de cumplimiento AWS concreta no es negociable. Fuera de esos dos, en 2026 S3 no es la vía barata para un SaaS que sirve usuarios por internet abierto.

La trampa a evitar es el default universal. Elegir uno de los tres para toda carga porque es el que ya conoces cuesta dinero real cuando llega el tráfico. El almacenamiento es fontanería, y la fontanería equivocada es invisible hasta que llega la factura.

Foto de Taylor Vick en Unsplash

Preguntas frecuentes

Does Cloudflare R2 have hidden costs?
The egress fee from R2 to the internet is genuinely zero, including through Cloudflare's CDN. The bill comes from operations and from a few overlooked items: $4.50 per million Class A operations (writes, lists, copies), $0.36 per million Class B operations (reads, head), and a minimum monthly storage duration on the Infrequent Access tier if you opt in. For a read-dominated workload, R2 stays cheap. For a high-write workload such as logs or analytics events, the ops cost can rival the storage cost.
Can I use Supabase Storage and R2 together?
Yes, and for most SaaS that scale past the Supabase free tier it is the cheapest configuration. Keep auth-scoped, user-private files on Supabase Storage so RLS handles authorisation in one place. Put public or CDN-served media on R2 to avoid the egress bill. The two systems share no native sync, so write your upload pipeline to target one or the other based on the file's audience, not based on convenience.
What about GDPR and EU data residency?
Cloudflare R2 lets you pin a bucket to an EU jurisdiction at creation time, which keeps objects within Cloudflare's European data centres. Amazon S3 gives you per-region buckets (eu-west-1, eu-central-1, eu-south-2, and others) and offers explicit BCR plus DPF transfer mechanisms. Supabase projects are pinned to a region at creation and storage objects follow the project region. All three can satisfy GDPR for most SaaS, but the specific certifications you need (SOC 2 Type II, ISO 27001, HIPAA, BSI C5) differ. Check each provider's compliance page against your customer contracts before deciding.
How risky is migrating from S3 to R2?
The byte copy itself is low risk thanks to Cloudflare's Super Slurper, which reads from S3 and writes to R2 server-side and pays no egress on Cloudflare's end. The risk lives elsewhere. Any code path that relies on S3-specific features (lifecycle rules, S3 Select, Object Lambda, cross-account replication, presigned URLs longer than 7 days) needs a rewrite before the migration. Run both buckets in parallel for at least one billing cycle, route reads to R2 first with S3 as fallback, and only flip writes once the read traffic looks clean.

Studio

Empieza un proyecto.

Un partner único para el producto digital que necesitas construir. Producción más rápida, tecnología moderna, costes reducidos. Un equipo, una factura.