Short answer: data coming into AWS is generally free; data going out to the internet, across Availability Zones or across Regions is not. Most surprise charges come from cross-AZ traffic and NAT Gateway processing, not from the internet.
Reference prices for us-east-1, public list prices at the time of writing. Always confirm on the EC2 and VPC pricing pages for your Region.
What is free
| Traffic | Cost |
|---|---|
| Data in from the internet | Free |
| Within the same AZ, using private IPs | Free |
| S3 or DynamoDB through a gateway endpoint | Free |
| From S3 to CloudFront | Free |
| Out to the internet: first 100 GB per month (aggregated across services) | Free |
What you pay for
| Traffic | Typical price (us-east-1) | Watch out for |
|---|---|---|
| Out to the internet (first 10 TB/month tier) | US$ 0.09 per GB | APIs and downloads served without a CDN |
| Between AZs in the same Region | US$ 0.01 per GB in each direction | Chatty microservices, replicas, load balancers across AZs |
| Between Regions | From about US$ 0.02 per GB (varies by Region pair) | Cross-Region replication, DR copies |
| NAT Gateway processing | US$ 0.045 per GB, plus hourly | S3 and ECR traffic from private subnets |
| Interface VPC endpoint | US$ 0.01 per GB, plus hourly per AZ | Cheaper than NAT for heavy AWS API traffic |
Example: two services in different AZs exchanging 1 TB per month (1,024 GB × US$ 0.01 × 2 directions ≈ US$ 20). Small per GB, large at scale.
Quick wins
- Add S3 and DynamoDB gateway endpoints to every VPC (why).
- Serve public downloads and APIs through CloudFront.
- Keep chatty services and their databases in the same AZ when the availability requirements allow it.
- Use Cost Explorer grouped by usage type and look for
DataTransferandNatGatewaylines.
Load balancers spread traffic across AZs. With cross-zone load balancing, part of your traffic crosses AZs and is billed, depending on the load balancer type.
Run the numbers for your account
Use the data transfer cost calculator with your own traffic and prices.