Cloud egress fees explained: the data-transfer bill nobody quotes you
Compute is the price you compare; egress is the price you pay. Here is how outbound data-transfer charges work on AWS, GCP, and Azure, why they dwarf the instance cost for some workloads, and how to keep them down.
When people compare cloud providers they compare the instance price — $0.0104/hour for a t3.micro, $0.0084 for an e2-micro. That number is real, and it is also the one line item most likely to be the smallest part of your invoice once real traffic shows up. The charge that surprises people is egress: the fee for data leaving the provider's network.
What egress actually is
Inbound data (traffic into the cloud) is almost always free. Outbound data — bytes your servers send to users, to the internet, or to another region — is metered per gigabyte. The big three price it in tiers that get cheaper at volume, but the first terabyte is where most small projects live, and that is the most expensive tier.
- AWS: the first 100 GB/month out to the internet is free; after that you are into the ~$0.09/GB band in most US/EU regions, dropping as you cross 10 TB and 50 TB.
- GCP: similar internet-egress tiers, with separate (and often pricier) rates for cross-region and cross-continent traffic.
- Azure: first 100 GB/month free, then a comparable per-GB rate that steps down at 10 TB.
Why it dwarfs compute for some workloads
Run the arithmetic. A small VM at ~$8/month that serves a video, image-heavy, or download-heavy site pushing 2 TB/month is paying roughly $180 in egress — more than twenty times the instance. For an API that returns small JSON payloads, egress is a rounding error. Egress is workload-shaped, which is exactly why a flat “cheapest VM” comparison misleads.
The hidden cross-region trap
Internet egress is the obvious one. The sneakier charge is inter-region and inter-zone transfer: replicating a database across regions, or chatty services split across availability zones, generate internal egress that is billed per GB even though it never touches the public internet. Architectures that look “highly available” on a whiteboard can quietly multiply the transfer bill.
How to keep egress down
- Put a CDN in front. Cache static and media bytes at the edge so they are served from the CDN's cheaper egress, not your origin's. For many sites this single change is the difference between a $180 and a $20 transfer bill.
- Keep chatty services in the same zone. Co-locate the app and its database; reserve cross-zone replication for what genuinely needs it.
- Compress and right-size payloads. Gzip/Brotli, modern image formats (AVIF/WebP), and trimming oversized API responses cut billed gigabytes directly.
- Watch egress to other clouds. Pulling data out of one provider into another is full-price egress on the way out. Multi-cloud is a transfer-cost decision as much as an architecture one.
- Consider providers with generous transfer allowances. Several non-hyperscaler hosts bundle several terabytes of transfer into the instance price, which can be dramatically cheaper for bandwidth-heavy projects.
The takeaway
The headline instance price tells you what a server costs to run. Egress tells you what it costs to be used. Before you commit to a provider, estimate your monthly outbound gigabytes and price the transfer alongside the compute — for anything that ships media or large downloads, transfer is the line item that decides the winner.