← All articles

Cloudflare R2 vs AWS S3: the bill, the benchmarks, and when the jump makes sense

08 November 20232 min read

R2 promises zero egress fees. For anyone running S3 + CDN, is the jump worth it? Real numbers from a client.

Cloudflare R2 has the same API as S3 but a different promise: zero egress costs. For anyone running public buckets behind a CDN, it sounds too good. Real numbers from a client below.

The case

A B2B media client of ours has 12 TB of assets (photos and videos) and ~8 TB/month egress. On AWS S3 + CloudFront they paid ~620 USD/month, mostly egress.

The migration

R2 exposes an S3-compatible API. We used rclone with multipart, and in 26 hours all files were in the new bucket. The codebase (Node.js uploader) needed one change: the endpoint.

Post-migration numbers

  • Storage: ~180 USD/month (S3 was ~140, R2 slightly more).
  • Egress: 0 USD (was ~480 USD).
  • Operations: ~12 USD/month (S3 was ~8).
  • Total: ~192 USD/month vs ~620 → −69%.

Trade-offs

R2 is younger: fewer regions, some operational gaps (e.g. leaner lifecycle policies). Latency is great inside Cloudflare's network, marginally worse in regions where S3 has dedicated PoPs. For most web-facing use, invisible.

When NOT to move

  • Heavy AWS compliance (Config Rules, GuardDuty, native audit logs).
  • Analytics workloads with Athena/Glue.
  • Event-driven architectures tightly coupled to SNS/SQS.

Otherwise R2 is an upgrade with no real lock-in (API is S3, you can move both ways). We'll propose it as default for new projects.