Before you redesign anything to avoid egress fees, find out whether you are paying them. AWS and Azure both give every account 100 GB of outbound internet traffic a month for free, and a brochure site, an internal tool or a small SaaS app with a few hundred users will often sit under that line forever. The businesses that genuinely pay for egress are moving video, shipping logs and backups to somewhere else, or serving large files to a global audience without a CDN in front.

What egress means on an invoice
Egress is the data your cloud account sends out to the public internet. Every image a browser downloads, every API response, every backup you copy to a different provider, every log line shipped to an external monitoring service. Ingress, the data coming in, is free on AWS, Azure and Google Cloud, which is deliberate: getting data in should never be the thing that stops you.
The confusion starts because egress is not one charge. There are at least four distinct meters with different rates: out to the internet, out to another region, across availability zones inside the same region, and through a managed gateway such as NAT or a load balancer. They appear under different line items, and the small ones are the ones that surprise people, because nobody budgets for traffic that never leaves the building.
If the vocabulary around managed services and raw infrastructure is still new, our explainer on cloud service models is the right place to start, because the model you choose decides how much of this traffic you even see.
The free allowances are not the same
The free allowance is the single most useful number in this article, and the three providers are not close to each other on it.
| Provider | Free internet egress per month | Rate once you pass it | Notes |
|---|---|---|---|
| AWS | 100 GB from all regions, plus 1 TB from CloudFront | $0.09 per GB in N. Virginia | Allowance applies account-wide, across regions |
| Microsoft Azure | 100 GB | $0.087 per GB in West Europe, first 10 TB | Routing via the Microsoft global network, the default |
| Google Cloud (Premium Tier) | 1 GiB | $0.12 per GiB to North America or Europe | Priced by destination, not source region |
| Google Cloud (Standard Tier) | 200 GiB | $0.085 per GiB from Iowa | Traffic rides transit ISPs rather than Google’s backbone |
| Cloudflare R2 | Unlimited | $0.00 | Object storage only, charged on storage and operations instead |
Google Cloud’s 1 GiB Premium Tier allowance catches people out constantly. It is not a typo and it is not a trick; Google’s pricing is built around destination geography rather than a generous starter allowance, and the Standard Tier exists precisely for traffic that does not need the premium backbone. If you are serving files to consumers and your users tolerate ordinary internet routing, the Standard Tier at $0.085 per GiB from Iowa is cheaper than AWS and Azure’s first tier.
What a terabyte out actually costs
Work the sum for a realistic month rather than arguing about per-GB rates. Here is five terabytes of outbound traffic, which is roughly what a modest video library or a busy download site produces, priced on each provider’s published tiers.
The arithmetic behind those bars is worth seeing, because the tier boundaries do most of the work. On AWS you deduct the 100 GB allowance and pay $0.09 on the remaining 5,020 GB. On Google Cloud Premium Tier to Europe you pay $0.12 on the first 1,023 GiB and $0.11 on the next 4,096 GiB, which is why it lands highest. On Cloudflare R2 you pay nothing for egress at all and $0.015 per GB-month to store the objects instead.
A $450 monthly egress bill is annoying. It is also about three hours of engineering time. Moving object storage to a different provider to save it only pays off if the migration costs less than a few months of the fee, and if the new provider’s storage and operation charges do not quietly replace what you saved.

Your region changes the rate
AWS prices internet egress by source region, and the spread is wider than most teams expect. These are the first-10-TB rates from AWS’s own price list, dated 16 September 2026.
| AWS region | First 10 TB | Next 40 TB | Next 100 TB | Above 150 TB |
|---|---|---|---|---|
| US East (N. Virginia) | $0.090 | $0.085 | $0.070 | $0.050 |
| Europe (Ireland) | $0.090 | $0.085 | $0.070 | $0.050 |
| Europe (Frankfurt) | $0.090 | $0.085 | $0.070 | $0.050 |
| Asia Pacific (Mumbai) | $0.1093 | $0.085 | $0.082 | $0.080 |
| Asia Pacific (Sydney) | $0.114 | $0.098 | $0.094 | $0.092 |
| Asia Pacific (Singapore) | $0.120 | $0.085 | $0.082 | $0.080 |
| South America (São Paulo) | $0.150 | $0.138 | $0.126 | $0.114 |
| Africa (Cape Town) | $0.154 | $0.147 | $0.126 | $0.112 |
If you serve a global audience from São Paulo because that is where your team sits, you are paying 67% more per gigabyte than the same workload in Ireland. That is not an argument for moving: latency to your actual users and any data residency obligation both outrank the rate card. It is an argument for knowing the number before you pick.
A content delivery network is not a performance luxury. On a download-heavy site it is usually the cheapest line on the bill.
The charges that are not internet egress at all
Three charges get filed mentally under egress and are not internet egress at all. All three are small per gigabyte and all three run constantly.
| Traffic type | AWS | Azure | What generates it |
|---|---|---|---|
| Between availability zones in one region | $0.01 per GB each way | $0.01 per GB each way | Multi-AZ databases, chatty services, replicas |
| Between regions | $0.02 per GB from N. Virginia | $0.02 per GB | Cross-region backups, read replicas, disaster recovery |
| Idle public IPv4 address | $0.005 per hour, in use or not | Charged per address | Load balancer experiments nobody cleaned up |
Cross-zone traffic is the one that produces genuinely confusing invoices. A single multi-availability-zone database replicating 200 GB a day generates about $120 a month in transfer charges, in both directions, for traffic that never touches the internet. That is usually money well spent, because the alternative is a single-zone database. The point is to recognise the line item rather than hunt for a bug.
Leaving is free, living in two clouds is not
The politics of egress changed in 2024 and the change is permanent. Google Cloud went first in January 2024, waiving network data transfer charges for customers migrating their data off Google Cloud entirely. AWS followed in March 2024, waiving data transfer out to the internet for customers moving off AWS, with a 2025 update giving eligible customers 90 days to complete the move. Microsoft announced the same for Azure in March 2024.
Read the shape of those programmes carefully, because they are narrower than the headlines. They cover leaving. They do not cover the ordinary traffic of running two clouds at once, which is the pattern most teams actually have: object storage in one place, analytics in another, and a pipeline between them billing every gigabyte at the standard rate. Our comparison of the major providers goes into where those pipelines usually form.
The regulatory direction is the same. Under the EU Data Act, switching charges are prohibited outright from 12 January 2027, with the transition period allowing only cost-based charges until then. Parallel use of two providers stays chargeable. If your plan depends on free data movement between clouds rather than out of one, nothing in either the vendor programmes or the regulation helps you.

Five ways to cut the number
In rough order of how much they return for the effort involved:
- Put a CDN in front of anything large and public. Cached bytes are served from the CDN’s rate card, not your origin’s, and AWS includes 1 TB a month of CloudFront transfer free.
- Compress and shrink before sending. Modern image formats and gzip or brotli on API responses routinely cut outbound volume by half, and the work is a configuration change rather than a project.
- Keep chatty services in one availability zone where the workload tolerates it, and accept cross-zone traffic only where it buys real resilience.
- Use a private endpoint for provider services. Traffic to a VPC endpoint stays off the NAT gateway and off the internet meter entirely.
- Move cold, large, rarely-read objects to a zero-egress store. Cloudflare R2 charges $0.015 per GB-month for standard storage and nothing for egress, which suits archives and media libraries.
Notice what is not on that list: switching provider. A different rate card is the slowest and riskiest way to cut an egress bill, and it tends to be the first idea in the room.

Eudora Technology works remotely with clients worldwide, and reading a cloud bill line by line is one of the first things we do on a new engagement. The cloud solutions page covers how we usually structure that, and the introduction to cloud technology is a good primer if you are new to how these services are assembled.
Frequently asked questions
Is inbound data really free?
Yes, on AWS, Azure and Google Cloud, data coming into the cloud is not charged. There can still be a charge for the thing that processes it, such as a load balancer or a NAT gateway, so an upload-heavy service is not quite free. But the bytes themselves cost nothing to accept, which is why bulk imports are rarely the expensive part of a migration.
Does a CDN always reduce the bill?
Not always, but usually for public static content with repeat requests. The CDN charges its own per-GB rate, so the saving comes from the cache hit ratio: bytes served from cache never leave your origin. For content that is unique per request, such as personalised API responses, a CDN adds cost without reducing origin egress much.
Can we negotiate egress rates?
At meaningful volume, yes. All three providers discount data transfer under enterprise agreements and private pricing, typically once committed spend reaches six figures annually. Below that you are on the public rate card, and the useful levers are architectural rather than commercial.
If leaving is free, why worry about lock-in at all?
Because the free exit programmes cover the data, not the work. Rewriting around a different managed database, retraining a team and re-doing compliance evidence is the real cost of moving, and the transfer fee was never the main obstacle. Free egress on exit removes a toll booth, not the journey.
Which provider is cheapest for a download-heavy site?
For object storage with heavy public reads, Cloudflare R2 with no egress charge is hard to beat on arithmetic alone. For a general workload, Azure’s $0.087 per GB in West Europe and AWS’s $0.090 in Ireland are close enough that egress should not decide the choice. Pick on the services you need, then design the traffic sensibly.
If your data transfer line has grown faster than your traffic, we can trace where the bytes are going and tell you which of the five fixes above is worth doing. Get in touch with Eudora Technology to talk about your project.



