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. R2 “$0 egress” marketing is not an AWS free-tier cliff twin and not S3 CRR; miss-driven CDN fill still belongs in Mode C.
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
Client ← Internet ← S3 — classic public GET; Internet egress tiers apply after free allowance.
Client ← CDN ← S3 origin — origin fill may still bill storage egress or CDN origin fees.
VPC compute ← S3 gateway/interface endpoint — often avoids Internet egress; watch interface endpoint fees.
Client ← Internet ← R2 — R2 commonly markets zero egress; verify ops pricing.
Multi-cloud sync S3 → R2 — the source usually pays egress.
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 (multi-cloud pulls, excluded regions) is unsafe. Treating DELETE/LIST as free because bytes look small undercounts chatty workloads. Blending S3 Internet GET with CRR inter-region replication or with CDN edge delivery into one cell. No scorecrowns — Unknown cells stay Unknown until dated.
One blog “egress $/GB” — free-tier cliffs, Class A/B request SKUs, and CDN origin bills are sibling lines. A single pasted rate hides the cliff remainder and ops tax.
R2 $0 = every destination — marketing often highlights Internet egress; multi-cloud pulls, excluded regions, and pairing rules still matter. Verify the current R2 pricing page before treating $0 as universal.
DELETE/LIST “free because small bytes” — chatty LIST/DELETE workloads meter ops even when payload GB looks quiet. Keep request SKUs on their own rows.
CRR blended into public GET — S3 CRR is bucket→bucket replication, not end-user Internet GET. Use the CRR spoke and a separate Mode A path.
CDN edge = storage egress erased — a CDN can shift who bills which bytes; miss-driven origin fill may still bill storage or CDN origin fees. Model Mode C separately.
Incomplete → crown — Unknown cells stay Unknown. PipeToll never invents S3 or R2 $/GB to finish a matrix. Stay FinOps-lite.
FinOps checklist
Inventory top prefixes by GET volume and bytes.
Separate cacheable CDN traffic from one-shot downloads.
Model free-tier cliffs and request SKUs as separate lines.
Worked example (educational): 5 TB public GET / month
Path: client ← Internet ← object store. Inventory 5,000 GB public GET on S3 and the same shape on R2 as separate path templates.
Enter 5,000 GB in Mode A via ?path=s3-r2&gb=5000; paste a verified $/GB or leave placeholders Unknown.
For S3, remember free-tier cliffs and request SKUs sit outside GB×rate — see the free-tier cliff spoke.
For R2, confirm whether your destination is included in any $0 egress marketing claim; ops/request SKUs stay separate lines.
Second educational stack (CDN origin fill twin): same 5 TB client downloads behind a CDN at 0.80 CHR → origin fill ≈ 1,000 GB. Price Internet GET (Mode A / S3 or R2) separately from miss-driven fill in Mode C (?path=cf-cloudflare). Enabling a CDN is not a guaranteed savings claim versus direct S3/R2 GET.
Worked-estimate sensitivity (educational)
Hold 5,000 GB client downloads and walk three path runs. Every $/GB stays Unknown until dated S3/R2/CDN cites — literacy only, not a quote or savings guarantee.
Run A — direct public GET: client ← Internet ← S3 (and the same shape on R2) as separate Mode A templates via ?path=s3-r2&gb=5000. Apply free-tier cliff literacy only on the S3 Internet line.
Run B — CDN at 0.80 CHR: 5,000 GB edge → ≈ 1,000 GB origin fill. Keep Mode A edge/GET narrative apart from Mode C fill (?path=cf-cloudflare). Who bills the miss depends on pairing — see CloudFront vs Cloudflare.
Run C — CDN at 0.95 CHR + ops: same 5,000 GB edge → ≈ 250 GB fill; add Class A/B (or R2 Class A/B) request SKUs as their own rows. Chatty LIST prefixes can dominate quiet-byte months.
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.
How does CDN origin fill change the matrix?
A CDN can shift who bills which bytes. Client GB at the edge ≠ origin fill GB. Estimate fill with Mode C and keep S3/R2 Internet GET as its own Mode A line — see CloudFront vs Cloudflare CDN.
Is R2 free egress the same as an AWS free-tier cliff or S3 CRR?
No. R2 marketing often highlights $0 Internet egress (with exceptions). AWS free-tier cliffs are complimentary allotments that end. S3 CRR is inter-region bucket replication. Keep the three path classes separate.
Trademarks: Amazon Web Services, AWS, Microsoft Azure, Google Cloud Platform, GCP, and Cloudflare are trademarks of their respective owners. PipeToll (Ameti One LLC) is not affiliated with, endorsed by, or sponsored by those companies. Educational comparisons may be outdated — verify current rates with each provider.