AWSCost

AWS cost · data transfer

Why your AWS data transfer bill is so high - and how to cut it

Data transfer is the cost nobody budgets for. There is no single “data transfer” line to point at - the charges are scattered across EC2-Other, NAT gateway, and half a dozen per-service lines, and each one is a fraction of a cent per gigabyte. At scale those fractions add up to 10 to 20% of a real AWS bill. The reason it hides so well is that moving bytes feels free. It is not. Here is where the money actually goes.

AWS bills data transfer on movement, not storage, and it hides in three places: data leaving to the internet ($0.09/GB), data pushed through a NAT gateway ($0.045/GB), and data crossing between Availability Zones ($0.01/GB each way). Inbound is free. Keep traffic in one AZ, replace NAT egress with Gateway VPC endpoints, and front internet content with CloudFront - and most of it disappears.

What does AWS actually charge for moving data?

Four movements, four very different prices (us-east-1 list pricing):

Where it goesRateNote
Out to the internet$0.09/GBfirst 10 TB/month, us-east-1 - the headline egress rate
Through a NAT gateway$0.045/GBprocessing, on top of the ~$0.045/hr the gateway costs to run
Between AZs (same region)$0.01/GB each way$0.02 round trip - the one that hides in HA setups
Into AWS from the internet$0inbound is free - only what leaves and what crosses a boundary bills

Why is data transfer so hard to see?

Because AWS does not group it. The NAT processing charge lands under the NAT gateway. Cross-AZ traffic lands under EC2-Other. Internet egress is split across whichever service sent it. No single line says “you spent $800 moving data this month,” so nobody looks. Two of these hide especially well and each has its own breakdown: the NAT gateway and cross-AZ traffic.

How do I cut my data transfer bill?

Four levers, in order of how often they pay off. Keep chatty services in the same AZ so traffic never crosses a $0.01/GB boundary. Replace NAT egress to S3 and DynamoDB with Gateway VPC endpoints, which are free. Put CloudFront in front of internet-facing content so you pay the cheaper CDN egress rate. And check inter-region replication you may not need. First, though, make the charges visible - this splits them out of EC2-Other so you can see which one to chase:

# every usage type this month - scan the output for the
# DataTransfer, Bytes, and NatGateway lines (edit the dates)
aws ce get-cost-and-usage \
  --time-period Start=2026-07-01,End=2026-08-01 \
  --granularity MONTHLY --metrics UnblendedCost \
  --group-by Type=DIMENSION,Key=USAGE_TYPE

Want to know how much of your bill is data quietly moving around? Connect your account read-only and see what it is wasting, in real dollars.

Connect your AWS

The role can only read - Get, Describe, List, nothing else. Read the exact permissions before you deploy it, and delete the stack whenever you want.

Frequently asked questions

Why is my AWS data transfer bill so high?+

Because transfer is billed on movement, not storage, and it hides in three places: data leaving to the internet ($0.09/GB), data pushed through a NAT gateway ($0.045/GB), and data crossing between Availability Zones ($0.01/GB each way). None of it shows up as a single 'data transfer' service - it is scattered across EC2-Other, NAT, and per-service lines.

How much does AWS charge for data transfer out?+

Outbound to the internet is $0.09/GB for the first 10 TB per month in us-east-1, dropping in tiers above that. Data transfer into AWS is free. Traffic between AZs in the same region is $0.01/GB in each direction.

Is data transfer within the same AWS region free?+

Only within the same Availability Zone using private IPs. The moment traffic crosses to another AZ - a common result of high-availability setups - it costs $0.01/GB each way. Traffic that leaves the region or the AWS network costs more.

What is the biggest hidden data transfer cost?+

Usually the NAT gateway. Private subnets route outbound traffic through it, and it charges $0.045/GB on top of the hourly rate - even for traffic going to other AWS services that never needed to leave your network. Gateway VPC endpoints for S3 and DynamoDB remove that charge entirely.

How do I reduce AWS data transfer costs?+

Keep traffic inside one AZ where you can, replace NAT egress to AWS services with Gateway VPC endpoints, put CloudFront in front of internet-facing content so you pay the cheaper CDN egress, and keep chatty services co-located rather than spread across AZs.

Does CloudFront reduce data transfer costs?+

For internet-facing traffic, usually yes. CloudFront egress is priced lower than direct EC2/S3 egress, and transfer from S3 or EC2 into CloudFront is free. For static content and APIs served to users, routing through CloudFront cuts the egress rate and adds caching on top.

How do I see data transfer charges on my bill?+

In Cost Explorer, filter by the usage types that contain 'DataTransfer' or 'Bytes', and group by usage type. That splits the scattered charges - internet egress, cross-AZ, inter-region - into lines you can actually read, instead of them hiding inside EC2-Other.

Related cost breakdowns

More AWS cost breakdowns