Infrastructure and SEO

Cloudflare R2 vs S3 vs Supabase Storage nel 2026: quale scegliere

Cloudflare R2 non addebita l'egress, S3 ha l'ecosistema più profondo, Supabase Storage nasconde l'infrastruttura. Come scegliere per un SaaS nel 2026 senza pagare di più.

22 maggio 20267 min di lettura
cable network

L'object storage è un namespace piatto di blob non strutturati accessibili via HTTP, fatturato sui byte memorizzati e sul traffico. Tre opzioni dominano la conversazione pratica nel SaaS del 2026: Cloudflare R2 (zero costi di egress), Amazon S3 (l'originale, l'ecosistema più profondo) e Supabase Storage (esposto da PostgREST, integrato con la row-level security). Tutti e tre parlano l'API S3, tutti e tre replicano fra data center, tutti e tre fatturano al GB. La differenza si vede appena inizi a far uscire byte.

TL;DR. Scegli R2 quando l'egress domina il conto. Scegli S3 quando vivi dentro AWS o ti serve una feature solo AWS. Scegli Supabase Storage quando i dati sono pochi, legati all'auth e non vuoi cablare un secondo servizio. Evita Supabase Storage come object store generico. Evita R2 se dipendi da Glacier o da certificati di compliance specifici di una region AWS. Evita S3 se il traffico è in larga parte asset pubblici.

Snapshot dei prezzi

AsseCloudflare R2Amazon S3 StandardSupabase StorageStorage per GB / mese$0.015$0.023$0.021 (oltre il free tier)Egress verso internet$0~$0.09 / GB~$0.09 / GB (oltre l'incluso)Operazioni Class A (scritture)$4.50 / milione$5.00 / milioneContate come richieste al DBOperazioni Class B (letture)$0.36 / milione$0.40 / milioneContate come richieste al DBAllowance mensile gratuita10 GB stoccati, 10M letture, 1M scrittureNessuna sugli account a pagamento1 GB su Free, 100 GB su ProCompatibilità API S3Gran parte della v4, con qualche bucoNativaSì, via Storage v3 API

Le cifre sono di listino, equivalenti US-East, prima degli sconti volume. AWS reserved capacity, S3 Intelligent-Tiering e i piani enterprise Supabase cambiano il calcolo. Prima di firmare verifica contro la tua forma di traffico reale.

Dove vince Cloudflare R2

Il titolo è l'egress. S3 fattura circa $0.09 per GB inviato verso internet pubblico. R2 non addebita nulla. Per una piattaforma video che serve 100 TB di girato ai viewer ogni mese è la differenza fra un conto da $9.000 e uno da $1.500, e il divario cresce in modo lineare con il traffico. L'annuncio di Cloudflare ha inquadrato R2 come attacco diretto a questa parte del modello AWS. Due anni dopo, il prezzo regge.

R2 fattura anche lo storage a $0.015/GB/mese, il 35% in meno di S3 Standard. Per un marketplace con un milione di immagini in cui ogni utente richiede la stessa foto prodotto tramite CDN una volta sola e mai più, il risparmio sull'egress è limitato ma lo storage si somma mese dopo mese, e comunque resti in vantaggio.

R2 parla gran parte dell'API S3 v4, quindi il codice esistente con AWS SDK funziona in larga parte cambiando endpoint e coppia di chiavi. I buchi sono reali ma gestibili nella maggior parte dei workload: nessun tier equivalente a Glacier, nessuna ACL per oggetto (usa bucket policy e signed URL), nessun bucket multi-region nel senso AWS (R2 è distribuito automaticamente sulla rete Cloudflare).

Dove vince Amazon S3

S3 ha vent'anni e ha l'ecosistema più profondo di qualunque object store. Se la tua pipeline di processing legge da S3 via Athena, Glue, EMR o trigger Lambda, uscire dalla region AWS costa di più di quanto la differenza di storage ti farà mai risparmiare. Stesso discorso sulla compliance: AWS ha HIPAA, FedRAMP, IRAP e decine di certificazioni region-specific che R2 non eguaglia voce per voce. Una banca a Francoforte che ha bisogno di eu-central-1 con una specifica attestazione BSI ha una sola opzione realistica.

S3 ha anche feature che R2 non offre. S3 Intelligent-Tiering sposta in automatico gli oggetti raramente acceduti su classi più economiche (fino a circa $0.004/GB/mese per Deep Archive), con un piccolo costo di monitoring. Per un archivio da 50 TB di log freddi che leggi due volte all'anno, Intelligent-Tiering più Deep Archive battono di molto la tariffa piatta di R2 a $0.015, anche tenendo conto dell'egress. Object Lambda, replica S3 fra account e S3 Batch Operations non hanno equivalenti R2 nel 2026.

La trappola è la bolletta di egress, e non si vede in sviluppo. Si vede quando un video di prodotto viene condiviso sui social e paghi ogni singolo download. Costruisci su S3, ma modella l'egress mensile prima di impegnarti.

Dove vince Supabase Storage

Supabase Storage sta dietro a PostgREST e condivide le stesse policy di row-level security delle tue tabelle. Una access_policy sull'oggetto storage eredita dalla riga che lo referenzia, quindi un utente loggato può scaricare solo i file del proprio tenant senza un secondo strato di autorizzazione. La superficie API è lo stesso client JS Supabase che usi per le query: nessun SDK in più, nessun secondo flusso di rotazione chiavi, nessun modello IAM separato.

Quell'integrazione è il punto. Per un tool interno che memorizza qualche centinaio di PDF per tenant o un SaaS in cui gli utenti caricano avatar e import CSV, Supabase Storage toglie un servizio dallo stack. Il piano Pro ($25/mese) include 100 GB di storage e 200 GB di egress, e copre la coda lunga di SaaS piccoli prima che debbano pensare all'object storage come voce di bilancio.

Perde malamente oltre quella soglia. Se memorizzi più di qualche centinaio di GB o spingi più di qualche TB di egress al mese, il prezzo al GB di Supabase si allinea a quello di S3, e rinunci ai risparmi sull'egress di R2 e alle opzioni di tiering di S3 per la comodità. La mossa giusta a quella scala è migrare i media caldi su R2 mantenendo i documenti privati dell'utente su Supabase Storage. L'abbiamo fatto per due clienti SaaS nell'ultimo anno.

Compatibilità, migrazione e il tranello dell'API S3

Tutti e tre i provider espongono un'API S3-compatibile, ma i bordi cambiano. R2 salta le signed POST policy (usa invece i signed URL), e il TTL degli URL prefirmati è limitato a 7 giorni mentre S3 lascia configurare limiti più ampi. L'endpoint S3 v3 di Supabase Storage è opt-in per progetto e racchiude alcune operazioni dietro il client JS Supabase. L'AWS SDK per JavaScript funziona contro R2 e Supabase con endpoint custom, ma boto3 in Python da anni inciampa silenziosamente sulla semantica del Conditional PUT di R2. Prima di dare per scontata la parità, controlla il bug tracker.

Le migrazioni fra i tre sono vincolate dalla banda, non dalla API. rclone con backend S3-compatibili gestisce tutti e tre, e Super Slurper di Cloudflare esiste apposta per tirare bucket S3 dentro R2 senza pagare doppio egress. La tassa nascosta della migrazione è qualunque codice scritto contro feature AWS-specific: lifecycle rule, S3 Select, Object Lambda, topologia di replica. Riscrivi quel codice prima di copiare oggetti, non durante.

Cosa spediamo come default nel 2026

Per un SaaS Next.js nuovo in cui il database è Supabase e ci aspettiamo un mix di upload piccoli per utente (avatar, allegati) e media pubblici grandi (video, immagini servite via CDN), il default è a due bucket. Supabase Storage per tutto ciò che è legato a un utente loggato dove il join con la RLS conta: foto profilo, upload di documenti, CSV con scope per tenant. R2 dietro a una CDN Cloudflare custom per tutto ciò che viene servito in modo ampio: immagini marketing, foto prodotto pubbliche, asset video, risorse scaricabili.

S3 entra in scena in due casi. Clienti esistenti già su AWS che hanno bisogno di uno store nella stessa region accanto alla pipeline Lambda di processing, e workload regolamentati in cui una certificazione di compliance AWS specifica non è negoziabile. Fuori da questi due, S3 nel 2026 non è la via economica per un SaaS che serve utenti sulla rete pubblica.

La trappola da evitare è il default universale. Scegliere uno dei tre per ogni workload perché è quello che già conosci costa soldi veri quando il traffico arriva. Lo storage è impiantistica, e l'impianto sbagliato è invisibile finché non arriva la bolletta.

Foto di Taylor Vick su Unsplash

Domande frequenti

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

Inizia un progetto.

Un partner unico per il prodotto digitale che devi costruire. Produzione più veloce, tecnologie moderne, costi ridotti. Un team, una fattura.