The Egress Asymmetry
Moving 100 TB out of a cloud costs $7,791. Moving it in costs nothing — and neither number is the largest line on the invoice
Published: 2026-10-11 | jslet Research | 15 min read
📑 In This Briefing
Ask what it costs to move a hundred terabytes and you will get a bandwidth answer. Ask what the migration actually cost and you will get an invoice with almost nothing in common with it. The two numbers diverge for a reason that has nothing to do with network engineering: a migration is priced by the direction the bytes travel, and most cost models do not have a direction in them at all.
The asymmetry is easy to state and hard to believe. Moving 100 TB out of AWS over the public internet bills $7,791. Moving the same 100 TB into AWS bills $0. Not a discount, not a credit, not a promotional rate — the published list price for inbound transfer is zero at every location on every major provider. The most expensive line in a migration is frequently the one that exists only because you chose to leave.
That single fact reshapes the rest of the model. If the transfer has no price, then the transfer cannot be the thing worth optimising, and the bill has to be coming from somewhere else. It is: a duplicate copy that exists for as long as both systems run, and an outage that is priced by your business rather than by your provider. Between them they are usually more than three-quarters of the total.
This is the written companion to the Storage Migration TCO calculator, which prices all six transfer paths against an identical dataset and keeps the dual-write and downtime lines visible. What follows is the part a transfer-path comparison hides: why the tier makes the headline rate fictional, why the dual-write period bills twice, why the largest line is the one no vendor calculator models, and the arithmetic cliff that makes 101 TB more expensive per byte than 100.
The Direction Is the Price
Cloud transfer pricing is a one-way tariff. Inbound is free; outbound is metered, tiered, and pooled across the account. The technical justification is thin — a byte arriving and a byte leaving cost roughly the same to move across a provider's backbone — and the commercial logic is straightforward. Ingress is customer acquisition. Egress is one of the costs of leaving, and leaving is the thing a provider is least motivated to make cheap.
Put the two directions side by side on the same 100 TB and the tariff stops looking like a network charge:
| Direction | Published rate | Bill for 100 TB |
|---|---|---|
| Outbound — cloud to internet | Tiered, $0.09 → $0.05/GB | $7,791 |
| Inbound — on-prem to cloud | $0.00/GB at all locations | $0 |
Nothing about the second row is a technical accident. It is the price a provider is willing to pay to win the workload, and it is refunded in full the first time the workload wants to leave.
This also explains a pattern that otherwise looks like carelessness: migration cost calculators published by cloud providers almost always price one path — theirs — and the path they price is usually the one that ends with data inside their own region. A calculator that prices all six paths against the same dataset is a different kind of tool, because it makes the asymmetry visible as a line item rather than a footnote.
Six Paths, One Dataset
Take a hundred terabytes, a 1% daily change rate, and a fourteen-day dual-write period. The dataset is identical in every row below; only the route changes.
| Transfer path | Billing basis | 100 TB + 14 TB delta |
|---|---|---|
| Same-region (cloud → cloud) | No transfer charge between these services | $0 |
| Inbound (on-prem → cloud) | $0.00/GB ingress | $0 |
| Cross-region (cloud → cloud) | $0.02/GB inter-region | $2,280 |
| Direct Connect | $0.02/GB + $0.30 per port-hour | $2,520 |
| Physical shipment (Snowball Edge) | $1,800 job + shipping + delta egress | $3,331 |
| Internet egress | Tiered $0.09 → $0.085 → $0.07 → $0.05 per GB | $8,771 |
The gap between the top and bottom of that table is not a proportional difference; it is a category change. The internet path costs 3.5× what a Direct Connect port costs for the same bytes, and the two paths at the top cost nothing at all. Within one provider's price list, the same 100 TB has four different prices depending on where it is going.
Two of those rows deserve a note, because they are the ones people skip.
Direct Connect is not just a cheaper rate
A 1 Gbps dedicated port is billed at $0.30 per hour whether or not it is moving anything, and the data itself at $0.02/GB. On 100 TB the bytes are $2,000 at that rate and the port adds roughly 800 billed hours — about $240. Add the 14 TB of delta, and the line lands near $2,520 against $8,771 on the internet path. That is a 71% reduction, and it comes entirely from the rate, not from the port.
The port has a property worth understanding before it is treated as free: it is billed by the hour and there is no minimum commitment, but provisioning a physical port takes two to twelve weeks, and nobody tears one down the day a migration ends. Teams that open a port for a six-week migration usually keep it, which means the correct comparison is not "800 hours" but "the months we are actually going to pay for". Even so, a month of 1 Gbps port is $219 against $5,791 of egress saved on 100 TB, so the port is rarely the deciding factor. It is the rate that decides.
Physical shipment is cheap per byte and expensive in weeks
A device in a van still has to be caught up by a wire afterwards, and the dual-write period runs the whole time it is away. That is why the Snowball row lands above the Direct Connect row despite a lower headline transfer cost — a point worth its own section, below.
The Rate on the Page Is Not Your Rate
Every AWS pricing page quotes egress at $0.09/GB. Almost nobody pays $0.09/GB on a migration, because the tiers are cumulative across the entire account for the month — a 100 TB transfer walks up through every band on its way to the top.
| Cumulative monthly egress | Marginal rate | Total bill | Effective $/GB |
|---|---|---|---|
| 1 TB | $0.090 | $81 | $0.0810 |
| 10 TB | $0.085 | $891 | $0.0891 |
| 50 TB | $0.085 | $4,291 | $0.0858 |
| 100 TB | $0.070 | $7,791 | $0.0779 |
| 150 TB | $0.070 | $11,291 | $0.0753 |
| 500 TB | $0.050 | $28,791 | $0.0576 |
Read the last column, not the first. The effective rate falls from $0.0810/GB at one terabyte to $0.0576/GB at five hundred, and it does so within a single month's billing period. Two consequences follow, and they point in opposite directions.
The first is that a large migration is cheaper per byte than a small one, which runs against the intuition that scale grows cost. The second, and the more interesting one, is that the migration does not get its own bill. It is pooled with the account's ordinary egress. A month in which something else is already pushing traffic out will drag the migration's marginal bytes into a cheaper band; a quiet month will leave them stranded in the expensive one. Two teams running byte-identical migrations in the same region can pay different amounts for them, and neither is doing anything wrong.
There is a second-order effect worth flagging for anyone considering a rate-reduction strategy. Pushing total account egress past 150 TB drops the marginal rate to $0.05/GB — marginally cheaper than a Direct Connect port's $0.02/GB only after the port is added, and then only on the bytes above the threshold. Consolidating traffic to reach a tier is a real technique, but it optimises a line that is, as the next two sections show, rarely the largest one.
The Bill That Arrives in Two Invoices
Very few migrations run as a single copy. The safe and standard pattern keeps the old system authoritative while the new one catches up, which means both copies exist simultaneously and every write is forwarded. That period — the dual-write window — has a cost with two halves, and neither half is labelled "dual-write" on any invoice.
The first half is storage: a full second copy exists for as long as the window is open. The second half is traffic: every day's changes have to be moved, on top of the baseline transfer. Both scale linearly with the length of the window, which makes the window a control that very few migration plans treat as one.
| Dual-write period | Delta transported | Transfer bill | Extra storage | Combined |
|---|---|---|---|---|
| 0 days | 0 GB | $7,791 | $0 | $7,791 |
| 7 days | 7,000 GB | $8,281 | $537 | $8,818 |
| 14 days | 14,000 GB | $8,771 | $1,073 | $9,844 |
| 30 days | 30,000 GB | $9,891 | $2,300 | $12,191 |
| 60 days | 60,000 GB | $11,791 | $4,600 | $16,391 |
Doubling the window from 30 to 60 days adds $4,200 to a migration whose entire transfer line is under $12,000. The reason this line escapes scrutiny is not that it is hidden but that it is decomposed: it arrives as a slightly larger storage bill and a slightly larger egress bill, and both look unremarkable in isolation. Nothing on the invoice says "this is the dual-write period"; there is only a storage line that grew and a transfer line that grew, in a month when a migration happened to be running.
Which is why the window belongs in the cost model rather than in the project plan. It is a duration, and durations are cheap to change before the migration starts and expensive to change after it does.
The Largest Line Nobody Models
Here is the number that decides most migrations and appears in almost none of their cost models.
The transfer path can be chosen and the dual-write window can be tuned. Downtime is a property of the business, and on any migration with revenue attached it dominates everything else. The table below holds the 100 TB workload and the 14-day dual-write period fixed and varies only the length and the cost of the cutover outage:
| Cutover outage | Loss per hour | Downtime cost | Share of TCO |
|---|---|---|---|
| 4 hours | $500 | $2,000 | 16.9% |
| 8 hours | $500 | $4,000 | 28.9% |
| 8 hours | $2,000 | $16,000 | 61.9% |
| 8 hours | $5,000 | $40,000 | 80.2% |
| 24 hours | $5,000 | $120,000 | 92.4% |
| 8 hours | $50,000 | $400,000 | 97.6% |
At $5,000 per hour, an eight-hour cutover is $40,000 — 4.6× the entire transfer bill and 80.2% of a $49,844 total cost of ownership. The transfer line, the thing with six paths and a tier ladder and a port-hour discussion, is under a fifth of the total. The outage is four fifths, and it appears in no cloud provider's migration calculator.
Two structural points follow from that table, and they are the reason it is worth building the whole model around this line rather than around the network.
The transfer path is the smallest lever in the migration
Choosing the worst path over the best costs $8,771. Choosing an eight-hour cutover over a four-hour one costs $20,000 at a $5,000/hour rate. Halving the outage does more for the bill than perfecting the transfer, and it does more for the customer experience at the same time. Teams that spend a sprint comparing Direct Connect against physical shipment and a meeting comparing Saturday night against Sunday night have the priorities exactly inverted.
The correct trade is usually longer dual-write against shorter outage
Extending the dual-write window by two weeks costs roughly $2,350 on a 100 TB migration — the 30-day column against the 14-day one. If that extra window is what allows the cutover to shrink from eight hours to two, the trade closes with an enormous margin at any realistic loss rate, and it keeps closing until the loss rate falls below roughly $400 per hour. This is the trade the standard migration plan never surfaces, because the two sides of it live in different documents: the dual-write window in the project schedule, the outage cost in the finance team's head.
The Integer Cliff
Physical shipment is the classic answer to "the link is too slow", and at the top of the range it is genuinely the cheapest per byte available. It is also priced in steps rather than in rates, and the steps are not where people expect them.
An AWS Snowball Edge Storage Optimized job is a flat $1,800 for up to 100 TB of load, and $3,200 for 101–210 TB. Fifteen on-site days are included; further days bill at $250 each; round-trip shipping is extra; ingest into S3 is free.
| Load on the device | Job fee | Effective $/GB |
|---|---|---|
| 100 TB | $1,800 | $0.018 |
| 101 TB | $3,200 | $0.032 |
| 210 TB | $3,200 | $0.015 |
One terabyte past the threshold raises the job fee by $1,400 — a 78% increase for a 1% volume increase — and it makes the marginal terabyte the most expensive one on the device. The block at 210 TB then amortises the same $3,200 down to $0.015/GB, cheaper per byte than the tier below it. Neither step is signposted, and both are reachable without anyone making a decision.
Three structural caveats keep physical shipment from being an automatic win, and together they explain why it lands above Direct Connect in the six-path table:
- The device stretches the dual-write window. It is on site for days and in transit for weeks, and both systems run the whole time. The window that was two weeks by plan becomes four or five, and the two billing lines that scale with it grow accordingly.
- The delta still travels by wire. A device cannot carry changes that happen while it is in a van. Whatever the source writes during transit has to be synced over the network afterwards, and at 14 TB of change that is about $1,231 of egress on its own — enough to erase the difference between the job fee and a Direct Connect transfer.
- The job fee is not the bill. Add round-trip shipping at carrier rates, the on-site day overage, and the destination storage for every ingested byte, and the flat fee stops being flat.
Place them together and the ranking is counter-intuitive in a useful way. At 100 TB on a 1 Gbps link, a Direct Connect port costs about $2,520 and finishes inside 800 billed hours; a Snowball job costs about $3,331 and takes weeks, during which the dual-write period and its storage bill keep running. Physical shipment wins decisively when the link is slow and the volume is large — the case it was designed for — and loses when the link is fast enough to finish before the truck does.
There is also a fifth path worth stating explicitly, because it removes the entire question: if source and destination share a region, or if the direction is into a cloud provider, the transfer line is zero. Before optimising a transfer path, confirm the transfer has a price at all. Half of all migration cost models are solving a problem the architecture already deleted.
A Five-Number Plan
Five numbers determine the total cost of a storage migration. Three of them are usually collected; two are usually guessed.
- Direction, then volume. Outbound is metered, inbound is free, same-region is free. Establish which one applies before anything else, because it decides whether there is a transfer cost to optimise at all.
- The effective rate, not the published one. Egress is cumulative per account per month. On 100 TB the effective rate is $0.0779/GB rather than $0.09, and it moves with whatever else the account is doing that month.
- The dual-write window, as a number of days. Not "until it's done" — a date. Every week adds delta traffic and a duplicate copy, and on a 100 TB migration each week is worth roughly $500 of storage plus its share of transfer.
- An hour of downtime, as a currency figure. Even a coarse estimate changes the plan. This is the number that decides whether the migration is a network exercise or a scheduling exercise, and it is the number most often left blank.
- The device threshold, if shipping physically. Check where the volume falls relative to 100 TB and relative to the egress tiers. Neither boundary is linear, and both are easy to cross without noticing.
Collect those five and the answer is a three-line budget with a dominant term, which is a far more useful artifact than a network throughput estimate. The dominant term will almost always be the outage — and knowing that in advance is what turns a migration from an infrastructure project into a business decision with a schedule attached.
Frequently Asked Questions
Why is moving data into the cloud free while moving it out is not?
Inbound transfer is $0.00/GB on every major provider and outbound is metered. The asymmetry is structural rather than technical: ingress wins a workload and egress is a cost of leaving it, so the difference is written into the price list rather than into the network. On AWS, 100 TB out over the public internet bills $7,791 and the same 100 TB in bills nothing. Regulators have taken notice — the EU Data Act's cloud-switching provisions require switching charges to be phased out, and the UK competition authority examined egress fees in its cloud market study — but a model built today has to price the tariffs that exist today.
What actually costs the most in a storage migration?
The outage, on nearly every migration with a business attached. On 100 TB with a 14-day dual-write period, the internet-egress transfer bills $8,771 and the duplicate copy adds $1,073, while an eight-hour cutover at $5,000 per hour of business loss is $40,000 — 80.2% of a $49,844 total and 4.6 times the entire transfer bill. Teams spend weeks choosing a transfer path and one meeting choosing the cutover window.
Is shipping a physical device cheaper than transferring over the network?
Cheaper per byte on a slow link, beaten by a Direct Connect port on a fast one. A Snowball Edge Storage Optimized job is $1,800 for up to 100 TB of load and $3,200 for 101–210 TB, plus round-trip shipping and network egress for every byte that changes while the device is in transit. At 100 TB that lands near $3,331 against $2,520 for a 1 Gbps port, because the port finishes in roughly 800 billed hours while the device is still in a van. The job fee also steps by $1,400 the moment the load passes 100 TB.
Does the headline egress rate apply to a large migration?
Almost never. AWS egress tiers are cumulative across the whole account for the month, so a 100 TB transfer walks through the $0.09, $0.085 and $0.07 bands and bills $7,791 — an effective $0.0779/GB rather than the $0.09 on the pricing page. Push 500 TB and the effective rate falls to $0.0576/GB. Pooling cuts the other way too: a heavy month elsewhere in the account can pull a migration's marginal bytes into a cheaper band, and a quiet month can leave them in the expensive one.
Methodology & Disclosure
All figures use published on-demand list prices in USD for US East (N. Virginia), tax excluded, with volumes decimal (1 TB = 1,000 GB). Internet egress is charged on the cumulative monthly volume: the first 100 GB free, then $0.09/GB to 10 TB, $0.085/GB to 50 TB, $0.07/GB to 150 TB, and $0.05/GB above. Direct Connect uses $0.02/GB data transfer out to a US Direct Connect location plus the port-hour rate matching the link capacity — $0.30/hr at 1 Gbps, $2.25/hr at 10 Gbps, $22.50/hr at 100 Gbps — with port hours billed for the transfer period. Transfer days = (GB × 8) ÷ (Mbps × 24), rounded up to whole port hours. Cross-region is modelled at $0.02/GB and same-region and inbound at $0.00. Snowball Edge Storage Optimized (210 TB) is $1,800 per job up to 100 TB of load and $3,200 for 101–210 TB, with 15 included on-site days at $250 per extra day and shipping modelled at $300.
The dual-write period holds a source and a target copy at once. Duplicate storage is priced at S3 Standard $0.023/GB-month prorated over a 30-day month; delta traffic is priced on the same path as the primary transfer, except for physical shipment, where the delta necessarily runs over the network and is billed as egress. Downtime is a user-supplied business-loss rate multiplied by the outage duration — it is not a vendor price and no provider publishes one. The model excludes egress charged by a non-AWS source provider, per-request charges ($0.005 per 1,000 PUTs, $0.0004 per 1,000 GETs), DataSync or Storage Gateway service hours, engineering time, source-side early-deletion or minimum-duration penalties, retrieval fees, bundled egress allowances, tax, credits, private pricing agreements, and EU Data Act migration waivers. Estimates are model outputs from list prices, not quotations; vendor tariffs change without notice and should be re-checked before committing spend. This site takes no sponsorship, no affiliate commission and no vendor payment of any kind; the vendors named here have no relationship with jslet and did not review this briefing.
References & Further Reading
- Amazon Web Services. Amazon EC2 On-Demand Pricing — Data Transfer — the internet egress tier ladder ($0.09 / $0.085 / $0.07 / $0.05 per GB), the 100 GB monthly free allowance, and the statement that tiers apply to aggregate account volume. aws.amazon.com
- Amazon Web Services. AWS Direct Connect Pricing — dedicated and hosted port-hour rates by capacity, data-transfer-out rates by source region and Direct Connect location, and the $0.00/GB data-transfer-in rate at all locations. aws.amazon.com
- Amazon Web Services. AWS Snowball Pricing — service fee per job by device and load band, the 15 included on-site days, the per-day extension fee, and free data transfer in to S3. aws.amazon.com
- Amazon Web Services. Amazon S3 Pricing — Standard storage rate per GB-month and per-request charges. aws.amazon.com
- European Union. Regulation (EU) 2023/2854 (Data Act) — the cloud-switching provisions requiring providers to remove switching charges over a defined transition period, and the tariff-transparency requirements that make the coming change visible in published price lists. eur-lex.europa.eu
- Related: Storage Migration TCO Calculator · Data Migration Time Estimator · AWS Egress Cost Estimator · Cloud Storage Cost · Cross-AZ Data Transfer Cost · The Churn Ceiling · Backup Strategy Cost
📜 Copyright & Attribution
© 2026 jslet Research. This article is an original work published on jslet (jslet.com). All rights reserved.
Sharing & Reprinting: You may share excerpts (up to 200 words) with a mandatory, do-follow link back to the original article URL. Full reproduction, translation, or adaptation requires prior written permission. Contact: support@jslet.com.
Cost-Model Disclaimer: Figures are model outputs from published vendor list prices, not quotations or measurements of any specific migration. Real bills vary with the account's aggregate monthly transfer, actual port provisioning and retention, delta volume and object count, source-side charges, and negotiated pricing. Validate against a pilot migration and a current price check before committing budget.