Why does hybrid cloud egress cost so much?
For most hybrid estates egress is not the biggest number on the invoice, and designing around it before measuring is a good way to make an architecture worse for a saving that never materialises. What egress genuinely is, is the least predictable line: it scales with behaviour rather than with capacity, so nobody can tell you next month's figure from this month's server count. The charges that surprise people are also usually not the ones they were watching.
What actually gets charged?
Data leaving the provider's network is billed per gigabyte, and data arriving is generally free. That asymmetry is the whole shape of the problem: the platform is cheap to fill and costly to drain, so any design that repeatedly pulls data back out is paying a toll that a design keeping the processing inside does not.
The charge is not only for the internet. Traffic between availability zones inside one region is billed in both directions on AWS and Google Cloud, at 0.01 USD per gigabyte each way, though Azure removed its inter-availability-zone charge in 2024 and now carries that traffic inside a region at no cost. Traffic between regions is billed everywhere, Azure included from 0.02 USD per gigabyte, and traffic passing through certain managed components is billed for the processing as well as the transfer. A byte can therefore be charged more than once on a single journey.
For hybrid specifically there is a second rate to know about. Data leaving over a dedicated private circuit is priced lower per gigabyte than data leaving over the internet, which is one of the genuine financial arguments for ordering one. Whether the discount clears the port fee is arithmetic on your own traffic, not a rule of thumb.
Where do the surprises come from?
Rarely from the thing that was budgeted. Teams model the obvious flow, the nightly extract or the API responses, and are then caught by charges generated by infrastructure choices that nobody thought of as data transfer at all.
The most common of these is chatter between availability zones, on AWS and Google Cloud. Spreading a cluster across zones for resilience is correct, and on those two platforms it means every internal call between components has a good chance of crossing a zone boundary and being metered. A busy internal service can therefore generate more billable transfer talking to itself than the application generates talking to your data centre. On Azure this category does not exist any more, because inter-availability-zone transfer within a region became free in 2024.
The second is the managed network address translation gateway, which charges for every gigabyte processed on top of the transfer charge, so private subnets reaching an external service pay twice. The third is disaster recovery: replication runs continuously and quietly, and the first full restore test produces a bill large enough that some organisations stop testing, which is the worst possible outcome of a pricing model.
| Source of charge | What triggers it | Usually noticed |
|---|---|---|
| Internet egress | Responses to users and calls back to your data centre | In the forecast, because it was expected |
| Cross-zone traffic (AWS and Google Cloud, not Azure) | A cluster spread across zones talking to itself | Second or third month, as traffic grows |
| NAT gateway processing | Private subnets reaching anything outside | When someone asks why a small service costs so much |
| Cross-region replication | Continuous copying for resilience or residency | Never fully, because it looks like storage |
| Load balancer processing | Volume through managed balancers, charged per unit | During a traffic spike |
| Restore and failover tests | Pulling a full backup or dataset back out | The first time the test is run properly |
Why does a chatty design cost more than one big transfer?
Because the charge follows total bytes, and chatty designs move the same bytes repeatedly. A service that fetches a full customer record every time it needs one field pays for the whole record on every call, and does so all day, whereas a single nightly synchronisation moves each record once.
Protocol overhead compounds it in a way that is easy to overlook. Verbose formats, uncompressed responses and headers repeated on every request all add bytes that carry no information for you but are metered exactly like the ones that do. Enabling compression on responses crossing the boundary is one of the few genuinely free improvements available.
The practical consequence is that egress optimisation and latency optimisation point the same way. Coarser endpoints, caching, and batching reduce both the round trip count and the transfer volume, which means the work you would do for performance also flattens the bill and does not need a separate business case.
How do you reduce it without redesigning everything?
Start with compression and caching, because both are configuration rather than architecture. Compressing responses that leave the provider network reduces the metered volume directly, and a cache on the on-premise side removes repeat requests for data that has not changed.
Then look at placement of the noisiest pair. Egress bills are usually dominated by one or two conversations, not spread evenly, so identifying the top talkers and moving one component to the other side of the boundary often removes most of the charge with a single change. This is a much smaller intervention than a general redesign and it is available to almost everyone.
After that, the structural options: keep the high-volume leg inside one availability zone where resilience allows, replace continuous replication with scheduled synchronisation where the freshness requirement permits, and move the private circuit conversation from a networking decision to a financial one once you know the sustained volume. Each of these has an operational cost, which is why they come after the free changes rather than before.
Does egress cost justify staying on-premise?
Only when the volume leaving is genuinely large and sustained, which is a narrower situation than the discussion suggests. Media distribution, large scientific datasets and continuous export of raw telemetry can reach volumes where the transfer charge dominates everything else. Most business applications do not come close.
The more honest framing is that egress pricing shapes the architecture rather than the location. It penalises designs that treat the cloud as a place to hold data that something else keeps reading, and rewards designs that process where the data already is and move only conclusions. That is a design constraint, and it is the same constraint data gravity describes from the other direction.
There is also a lock-in argument that is distinct from the cost argument and worth keeping separate, and it has changed. The old concern was that the price of leaving scaled with how much you had accumulated, so an exit got more expensive the longer it was deferred. That is no longer true of the transfer charge for a full exit: since early 2024 all three major providers waive it for customers leaving entirely, Google Cloud from January 2024 through its Cloud Exit form, AWS from 5 March 2024 for accounts in good standing moving all their data off, and Microsoft Azure on notifying it of a start date and a volume. Each gives about 60 days to complete the migration, and Azure expects all subscriptions to be cancelled at the end of it. The EU Data Act, Regulation (EU) 2023/2854, then removes switching charges including egress altogether from 12 January 2027.
So the thing to plan for is not a bill that grows with your stored volume, it is time, coordination and meeting the conditions those exit programmes set. Ongoing egress for a workload you are still running is unaffected and continues to be billed normally, which is why the operational figure and the exit figure should never be quoted as the same number.
How do you forecast it before committing?
Measure the traffic you already have. Flow records from your existing firewall or router will tell you how many bytes per day pass between the systems you intend to split, and that figure multiplied by the published per-gigabyte rate is a defensible first estimate rather than a guess. Most organisations have this data and have never queried it.
Then add the parts the flow records cannot see: the cross-zone traffic your future cloud deployment will generate internally, the replication you intend to run, and the restore test you will need to perform. These are the components that break forecasts, and they are estimable from the intended topology rather than from measurement.
Finally, set a billing alert on the transfer categories specifically, not just on the total. A total budget alarm fires after the surprise has happened and tells you nothing about which conversation caused it. A per-category alert in the first month of a hybrid deployment is the cheapest insurance available, and it turns a bill you have to explain into a change you catch in a week.
Common questions
- What is cloud egress and why is it charged?
- Egress is data leaving a cloud provider's network, billed per gigabyte, while data arriving is generally free. That asymmetry means the platform is cheap to fill and costly to drain, which penalises designs that repeatedly pull data back out. The charge is not limited to internet traffic: transfer between availability zones and between regions is commonly billed too, so a single byte can be metered more than once on its journey.
- What causes unexpected data transfer charges in the cloud?
- Usually not the flow that was budgeted. The frequent causes are chatter between availability zones inside one region on AWS and Google Cloud, where a cluster spread for resilience is metered every time its components talk, though Azure dropped that charge in 2024 and now moves data between zones in a region free; managed NAT gateways that charge for processing on top of transfer; continuous cross-region replication that looks like a storage cost; and restore or failover tests, whose first honest run pulls a full dataset back out.
- Is egress cost a good reason to stay on-premise?
- Only where the outbound volume is genuinely large and sustained, such as media distribution or continuous export of raw telemetry. Most business applications do not approach those volumes. Egress pricing more usefully shapes architecture than location: it penalises treating the cloud as a store that something elsewhere keeps reading, and rewards processing data where it already sits and moving only the conclusions.
- How do you reduce hybrid cloud egress costs?
- Begin with compression on responses crossing the boundary and a cache on the receiving side, since both are configuration rather than redesign. Then find the top talking pair, because these bills are usually dominated by one or two conversations rather than spread evenly, and relocating a single component often removes most of the charge. Structural options follow: keeping high-volume traffic within one availability zone, and moving from continuous replication to scheduled synchronisation where freshness allows.
- Does a private circuit reduce egress charges?
- Yes, data leaving a provider over a dedicated private circuit such as Direct Connect, ExpressRoute or Cloud Interconnect is priced lower per gigabyte than data leaving over the internet. Whether that discount covers the port fee and cross-connect costs depends entirely on sustained volume, so it is arithmetic on your own traffic figures rather than a general rule.
- How do you estimate egress costs before migrating?
- Query the flow records from your existing firewall or router for bytes per day between the systems you intend to separate, then multiply by the published per-gigabyte rate. Add the categories flow records cannot show: internal cross-zone traffic the cloud deployment will generate, planned replication, and restore testing. Then set billing alerts on transfer categories specifically rather than on the account total, so a surprise is caught in a week rather than at month end.