Educational — Cloud egress & data-transfer cost guides. FinOps-lite estimators. Not a quote, broker, or savings guarantee. Launching soon where incomplete.
object-storage · Educational

Cloud egress: AWS S3 vs Cloudflare R2 path matrix

S3 versus R2 egress depends on who pulls and which network path fires—not marketing slides. Public GET, CDN origin fill, and same-region compute pulls meter differently. Compare path classes first; leave $/GB Unknown until verified on dated provider pricing pages.

Updated

Compare how object-storage egress is billed on AWS S3 versus Cloudflare R2 using path templates — not vendor marketing slides.

Path matrix: AWS S3 vs Cloudflare R2 egress path classes (educational)
Path classS3 (typical)R2 (typical)Verify
Internet egress (GET to public client)Tiered $/GB after free allowanceOften $0 egress to Internet (confirm current)Provider pricing pages + region
Same-region to computeOften free/reduced; check AZ/VPC endpointsWorker/R2 same-account patterns differArchitecture diagram
Cross-region / multi-cloud pullInter-region + Internet may stackPull-from-origin or copy fees may applyTransfer method
CDN origin pullCloudFront/other CDN may shift billR2+CDN pairing changes who paysCDN bill vs storage bill
DELETE / LIST / API request chargesRequest SKUs separate from egressOps/request pricing separateBill line items

Provider source footnotes

  1. AWS S3 pricing — as-of Unknown until verified
  2. Cloudflare R2 pricing — as-of Unknown until verified
  3. AWS CloudFront pricing (origin context) — as-of Unknown until verified

Dated starting points only — Unknown until verified means no invented $/GB. PipeToll does not scrape private consoles or guarantee figures.

Path-class vocabulary: path template, Unknown until verified. This spoke is a path matrix, not a price clone. Egress depends on who pulls, which network path, and which SKU fires. Titles lead with Cloud egress so readers are not hunting American pipe-toll brands.

Path templates to model

Common traps

Pasting a single “egress $/GB” from a blog ignores free-tier cliffs, Class A/B ops, and CDN origin bills. Assuming R2 $0 covers every destination is unsafe. Treating DELETE/LIST as free because bytes look small undercounts chatty workloads. No scorecrowns — Unknown cells stay Unknown until dated.

FinOps checklist

  1. Inventory top prefixes by GET volume and bytes.
  2. Separate cacheable CDN traffic from one-shot downloads.
  3. Model free-tier cliffs and request SKUs as separate lines.
  4. Re-price after architecture change; open calculator (?mode=gb&path=s3-r2) for GB×$/GB sensitivity only.
  5. Cite provider pages per methodology; link egress vocabulary.

FinOps-lite Unknown until verified

Worked example (educational): 5 TB public GET / month

Path: client ← Internet ← object store. Enter 5,000 GB in Mode A and paste a verified $/GB (or leave placeholders as Unknown). For S3, remember free-tier cliffs and request SKUs sit outside GB×rate. For R2, confirm whether your destination is included in any $0 egress marketing claim. Not a quote.

Open calculator

FAQ on this path

Is R2 always zero egress?

Marketing often highlights $0 Internet egress, but ops/request pricing, excluded destinations, and pairing rules still matter. Verify the current pricing page.

Does a CDN remove S3 egress?

A CDN can shift who bills which bytes. Origin fill may still bill storage egress or CDN origin fees — see the origin-fill spoke.

What should I compare first?

Path class (who pulls, which network) before any $/GB. Request SKUs and free-tier cliffs next.