Back to System Design Index

Cloud InfrastructureOctober 202612 min read

The $0.09 Toll: Why Egress Is the Cloud's Real Lock-In

In September 2021, Cloudflare announced object storage with no egress fees and called its rivals' bandwidth pricing what it was: the lock-in mechanism hiding inside every architecture diagram. Five years later the tollbooth still stands — nine cents a gigabyte on the way out of AWS, nothing on the way out of R2. This file prices the gap, explains why it exists, and shows how to design around it.

TL;DR: Cloud providers buy transit by capacity (dollars per peak megabit) and sell it by volume (cents per gigabyte) — Cloudflare's analysis puts the markup at 80x or more. AWS S3 egress starts at $0.09/GB; R2 charges $0 with $0.015/GB-month storage. A terabyte out costs $90 from one and $0 from the other. The figures below are 2021–2022 reported rates plus the calculator's current model; re-check live pricing before budgeting. Rerun your own volume in the Cloud Egress Cost Calculator.

AWS first-tier egress
$0.09 / GB
R2 egress
$0
Claimed markup
80x+
10 TB model bill
$891 / mo

By Mukul Kumar Mishra · Research-led cost teardown · Updated October 11, 2026

1. The Announcement That Named the Tax

On September 28, 2021, Cloudflare announced R2 object storage with three properties that read like an indictment: full S3 API compatibility, storage at $0.015 per GB-month, and zero egress fees. CEO Matthew Prince said cloud storage had attracted developers with cheap ingress and then locked them in with exorbitant egress, calling the fees "nothing but a tax on developers." The product was the argument: identical API, a third cheaper storage, and the tollbooth removed.

The move extended a campaign Cloudflare had started in 2018 with the Bandwidth Alliance — providers mutually waiving transfer fees — and it landed: R2 reached general availability in September 2022 with customers like Vecteezy reporting existing egress bills in the six figures a year. Whether or not you buy Cloudflare's framing, the numbers below are worth pricing yourself, because the toll applies to every gigabyte your architecture serves to the internet.

The number that matters: at $0.09 per GB, moving one terabyte out of S3 costs $90 in transfer alone. The same terabyte out of R2 costs $0. Storage is the receipt; egress is the bill.

2. Anatomy of the Toll: Volume Prices on Capacity Costs

Here is the mechanism the tollbooth hides. Network operators buy transit by capacity — dollars per peak megabit per month, a flat pipe price — while cloud providers sell it by volume, cents per gigabyte transferred. Cloudflare's analysis argues the spread between those two numbers reaches 80x or more in the US, and notes the industry's open secret: most hosting providers already discount or waive egress toward peers, so the underlying bandwidth often costs the provider little or nothing incremental.

AWS's side of the ledger is tiered but unrelenting: about $0.09 per GB for the first 10 TB a month out to the internet, stepping down with volume to around $0.05 past 150 TB, with the first gigabyte free and a 100 GB monthly allowance shared across services. R2's side is one line: $0 per GB out, $0.015 per GB-month stored. Same S3 API, same objects, different theory of what the customer should pay for.

Egress pricing diagram: AWS charges $0.09 per gigabyte out while R2 charges nothing, over capacity-priced transit
Figure 1. The tollbooth in one diagram. Providers buy capacity by the megabit and sell it by the gigabyte; R2 deleted the second half of that sentence.

3. Worked Math: From One Terabyte to Fifty Grand

Take the independent worked example from Last Week in AWS's 2021 analysis. One terabyte served from S3: $90 in egress plus $23 in storage. Serve it through an R2 migration proxy instead — paying AWS $0.09 once to move each byte, both storage fees during the copy — and the first month totals about $128, falling to roughly $27.50 a month thereafter as repeat requests serve from R2. The migration pays for itself the second month at this volume, which is exactly why the toll exists: without it, leaving would be free.

At scale the numbers stop being rounding errors. The same analysis priced a large all-AWS egress footprint at $53,891.16 in transfer for the period — a five-figure line item for moving your own bytes to your own users. The calculator's default model keeps it current-shaped: 10,000 GB at $0.09 minus the 100 GB allowance bills $891 a month, $30 a day, ticking whether or not anyone looks at the dashboard. Egress is the rare cloud line that grows with success and can only be cut by architecture, never by usage discipline alone.

Price your own tollbooth: monthly egress ≈ (GB out − free allowance) × tier rate. Run it in the Cloud Egress Cost Calculator, then divide by your storage bill. Ratios above one mean transfer, not storage, is your cloud bill.

4. Why Leaving Costs One Last Toll

The cruelest property of egress pricing is that it taxes the escape. Migrating a terabyte out of S3 means paying the $0.09 toll on every byte exactly once — Cloudflare's S3-migration proxy exists precisely to pay it incrementally, copying objects on first request so the bill spreads across months instead of landing as one exit invoice. Design lesson: the cheapest migration is the one that never finishes all at once.

Providers with private backbones and peering depth pay least for the underlying transit, which is why the same gigabyte costs different amounts in different clouds and regions. Model egress per destination path, not as one global rate: US East internet egress, cross-region replication, and CDN-origin pulls each ride different tiers and allowances. The calculator models one path at a time for exactly this reason — blend paths and the average lies.

5. What to Steal

First, serve hot bytes from where egress is zero or cheapest. CDN cache-hit ratio is an egress lever before it is a latency lever: every cached gigabyte is a gigabyte never tolled. Price the cache with the cache savings calculator and watch egress fall as a side effect.

Second, keep cold bytes where the toll never applies. Archives, backups, and infrequently read objects belong in storage with no retrieval tax, not beside the hot path. Lifecycle rules are egress policy wearing a storage costume.

Third, count egress per path per month and alert on slope. Gigabytes per day times tier rate, tracked against commit, turns the tollbooth into a metric the on-call owns — the same ingest-slope discipline as log pipelines.

Fourth, negotiate or migrate with the toll itemized, not bundled. A renewal conversation that names the egress line separately gets a different answer than one that waves at the total. And a migration plan that amortizes the exit toll across months beats one that pays it upfront.

Fifth, design multi-cloud reads, not multi-cloud writes. One authoritative copy plus cheap or free reads everywhere beats two writable copies syncing across tolled links. Data gravity is just egress with patience.

6. The Postmortem Verdict

Three clocks ran in this story: the 2021 announcement named the tax, the 2022 general availability proved customers would switch for it, and every invoice since has confirmed the tollbooth is load-bearing for provider margins. Treating egress as a pass-through cost misses the mechanism — it is the mechanism, the single line that converts stored bytes into switching costs.

The disclosure that matters is not any single rate but the pricing shape: capacity bought, volume sold, markup banked. Until your architecture prices the tollbooth per path and serves hot bytes from behind it, every growth chart is also an egress chart. R2 proved the toll is optional. Your bill proves whether you noticed.

Storage is the receipt. Egress is the bill.

Sources and Method

R2 terms, dates, storage pricing, and executive quotes come from Cloudflare's 2021 announcement and 2022 GA release. Transit-vs-volume economics and the 80x markup figure are Cloudflare's stated analysis. Tiered AWS figures and worked migration math come from Last Week in AWS's October 2021 analysis; treat all 2021 rates as reported, and re-check live pricing before budgeting. The $891 model is the default output of the linked Buildopsy calculator.