2026-03-15 · AWS Cost

AWS Data Transfer Costs Explained

Data transfer charges are responsible for more bill surprises than almost any other AWS cost category. The pricing is not intuitive, it varies by direction and destination, and small architecture decisions can create large ongoing costs.

This is a breakdown of how AWS data transfer pricing actually works and where teams most commonly get hit.

The basic rule

Inbound data transfer to AWS is free. Data coming in from the internet, from other regions, or from other services does not cost anything.

Outbound data transfer is where you pay. The direction, destination, and service all affect the rate.

Internet egress

Sending data from AWS to the internet is the most expensive category. The rate is tiered and varies slightly by region, but in us-east-1 you pay around $0.09 per GB for the first 10 TB per month, dropping incrementally after that.

This adds up fast on any workload that serves data to users directly. A service delivering 100 TB per month of content pays around $8,500 just in egress, not counting compute or storage. CloudFront reduces this significantly because it has a lower egress rate than EC2 direct egress, and there is no charge for transfer from S3 to CloudFront.

Cross-region transfer

Sending data between AWS regions costs money in both directions. The rate is roughly $0.02 per GB, depending on the region pair.

This becomes relevant when your architecture spans regions. A database in us-east-1 serving an application in eu-west-1, an analytics pipeline pulling data across regions, or a multi-region backup strategy all generate cross-region transfer charges that are easy to overlook in architectural planning.

Same-region transfer between services

Transfer between services in the same region is generally free when traffic stays within the same Availability Zone. When traffic crosses AZs within the same region, you pay around $0.01 per GB in each direction.

This catches teams who put EC2 instances in one AZ and RDS in another for redundancy without accounting for the inter-AZ transfer cost. It also applies to ECS tasks, Lambda, and other compute services communicating with databases or caches across AZs.

NAT Gateway

NAT Gateway has two separate charges: an hourly charge for the gateway itself and a data processing fee of $0.045 per GB for all traffic that passes through it.

The data processing fee applies to all traffic regardless of direction or destination, so every byte your private subnet sends to the internet and every byte coming back gets charged. A workload doing significant data processing in a private subnet can generate substantial NAT Gateway fees that are easy to miss until the bill arrives.

A common optimization is to route traffic to AWS services like S3 or DynamoDB through VPC endpoints instead of through the NAT Gateway. Endpoints eliminate the NAT Gateway processing fee for that traffic, and for high-volume workloads the savings are significant.

Transfer accelerator and PrivateLink

Transfer Acceleration on S3 adds a surcharge on top of standard transfer pricing in exchange for faster upload speeds using the CloudFront edge network. It is useful for large file uploads from distant locations but adds cost that is easy to leave enabled when no longer needed.

PrivateLink charges per hour per endpoint and per GB of data processed. If you have services communicating through PrivateLink endpoints, those charges appear as separate line items in the bill.

Why it is hard to diagnose

Data transfer charges appear under several different service names in your Cost and Usage Report. You might see charges under AmazonEC2 for inter-AZ and internet egress, under AmazonS3 for S3 egress, under AmazonCloudFront for CDN egress, and under AWSNATGateway as its own line item.

Because the charges are spread across services, it is easy to miss the total picture by looking at any single service. The line_item_usage_type column in the CUR is what you need. Values like DataTransfer-Out-Bytes, DataTransfer-Regional-Bytes, and NatGateway-Bytes tell you exactly what category each charge falls into.

When a data transfer spike shows up in BillSpike's cost driver breakdown, it will appear under the service that generated it with the usage type identifying the transfer category, making it straightforward to trace back to the workload responsible.

The short version

Free in, paid out. Cross-region costs around $0.02 per GB. Internet egress costs around $0.09 per GB. NAT Gateway adds $0.045 per GB on top of whatever the underlying transfer would cost. Inter-AZ traffic costs $0.01 per GB each way.

If your bill has a data transfer spike, the CUR usage type column will tell you which category it is. From there you can trace it to a specific service and decide whether the fix is a VPC endpoint, a CloudFront distribution, or an architecture change.


Analyze your own AWS cost spike at billspike.io