AWS prices data transfer by the path a byte takes, not by the service that sent it. Data into AWS is free. Data out to the internet, across Availability Zones and between Regions is metered, and NAT Gateway adds its own charge on top. This page maps every path, shows how to find your number in Cost Explorer and the Cost and Usage Report (CUR), and lists the fixes in order.
Other AWS costs count something you provisioned: instance-hours, gigabytes stored, requests. Data transfer counts an event you never see: a packet crossing from one place to another. That is why it is hard to predict and easy to ignore.
It is priced by where data moves, not by which service moved it. The same gigabyte costs nothing inside one Availability Zone over private IPs, about a cent each way across AZs, about two cents between Regions, and about nine cents out to the internet, before NAT Gateway adds its own charge. So a "database cost" investigation often ends at a networking line.
The defaults that create it are all correct. Multi-AZ creates cross-AZ traffic, private subnets create NAT traffic, replication creates inter-Region traffic, and serving users creates internet egress. Nobody questions them, so the spend grows until someone lines it up against the architecture and asks, charge by charge, whether each byte needs that path.
There are only a few paths. Once you can name them, the bill is readable. Rates below are representative US-Region figures; check the current rates for your Region on the AWS pricing pages, since they vary by Region and step down at volume.
Data into AWS is free and data inside one AZ on private IPs is free. Everything else (cross-AZ, inter-Region, internet egress and the NAT charge) is metered and stacks. The work is moving each kind of traffic to its cheapest correct path.
Cost Explorer gives you the totals in a few minutes. The Cost and Usage Report gives you the resource-level detail that tells you which path to fix.
Open Cost Explorer, pick monthly granularity over the last few months, and group by Usage Type. Read the codes: DataTransfer-Out-Bytes is internet egress, DataTransfer-Regional-Bytes is cross-AZ (billed both ways), DataTransfer-Inter-Region is Region to Region, and NatGateway-Bytes is NAT processing. Prefixes like USE1- tell you the Region.
Large internet egress points at CloudFront. Large regional bytes point at cross-AZ chatter. A large inter-Region line points at replication you can scope or compress. Add a Cost Anomaly Detection monitor on these usage types so a new chatty workload shows up early.
The CUR is the line-item export to S3, queryable with Athena. Group lineItem/UsageType and lineItem/ResourceId by cost, descending, and you get transfer spend ranked by resource: which load balancer, which NAT Gateway, which bucket, which replica.
For cross-AZ and NAT traffic, add VPC Flow Logs. Aggregate bytes by source and destination subnet and AZ to see which service pairs talk across AZs and what dominates the NAT path. The result is one sentence you can act on, for example: "most of our transfer is app-to-cache across AZs, then cacheable egress without a CDN, then S3 over NAT."
The same four patterns cause most data-transfer spend. Your CUR breakdown maps straight onto this list.
Spreading services across AZs is correct for availability, but every request that crosses an AZ pays about $0.01/GB each way. An app tier talking to a database, cache or broker in another AZ, all day, in both directions, adds up. Database and cache replication across AZs adds more.
S3 reads, ECR image pulls, DynamoDB calls and other AWS API traffic from private subnets often route through NAT and pay about $0.045/GB for bytes a VPC endpoint carries for free (S3 and DynamoDB gateway endpoints) or for about $0.01/GB (interface endpoints). The NAT Gateway cost page covers this in depth.
Serving assets and API responses straight from EC2, a load balancer or S3 pays the full egress rate on every byte. CloudFront egress costs less per GB, origin-to-CloudFront transfer is free, and cached requests never reach the origin. You cut both the rate and the volume.
Disaster recovery and latency setups replicate all the time, and every byte pays about $0.02/GB. S3 Cross-Region Replication, cross-Region read replicas, DynamoDB global tables and snapshot copies are the usual sources. The lever is to replicate less and smaller: only the data that needs a second Region, compressed.
Once you know which path dominates, the fixes are mechanical and low-risk. The first two are free.
Add gateway VPC endpoints for S3 and DynamoDB. They have no hourly or per-GB charge and take that traffic off the NAT path. For other busy AWS services (ECR, CloudWatch, Secrets Manager, SSM, STS, SQS, KMS), add interface endpoints: a small hourly fee per endpoint per AZ plus about $0.01/GB, roughly a quarter of the NAT rate.
Keep tightly coupled, high-traffic pairs (app and cache, app and read replica) in the same AZ, and keep a second AZ for failover rather than steady traffic. Use AZ-aware clients and topology-aware routing so reads stay local, and make sure internal traffic uses private IPs.
Put CloudFront in front of anything cacheable or high-volume: static assets, media, downloads and cacheable API responses. Origin-to-CloudFront transfer is free and edge caching removes repeat requests from the origin.
When services in different VPCs or accounts talk, AWS PrivateLink keeps the traffic on the AWS network instead of sending it out and back through NAT and the internet.
For traffic you cannot reroute, shrink it: Gzip or Brotli on responses, compressed payloads before replication, efficient serialization. One trap: S3 Transfer Acceleration speeds up long-distance uploads but adds a per-GB fee on top of normal transfer. It buys speed, not savings.
Quantify, attribute, take the free wins, then optimize what is left. Free reroutes come before paid fixes, and attribution comes before action.
Everything above is doable in-house if you have the time to decode usage types, query Flow Logs and change routes without breaking connectivity. If you do not, a partner can do it.
CloudRoute matches you with one vetted AWS partner that fits the work. The partner attributes your transfer spend in the CUR and Flow Logs, then deploys the endpoints, placement changes, CloudFront and compression, tested in staging. The same review usually turns up nearby savings too: idle resources, right-sizing and commitment coverage.
Who pays: a cost cleanup on its own is normal paid work, and you decide whether the savings justify it. AWS funding that a partner can file comes through three routes: MAP when you migrate to AWS, POC when you test something, and incremental workload (IW) funding when you launch new work on AWS. If your network work is part of one of those, the partner checks whether it qualifies. For startups that is typically $50K to $150K. Depends on the workload; AWS approves.
Nothing. CloudRoute is free for startups. Partners pay CloudRoute a monthly membership plus 10% of AWS-approved funding.
Each common scenario next to its rate and its fix. Rates are representative US-Region figures; check current pricing for your Region.
| Scenario (the path a byte takes) | Representative rate | Why it happens | The fix |
|---|---|---|---|
| Inbound from the internet | $0/GB | AWS does not charge for data in | Nothing to fix |
| Same-AZ over private IPs | $0/GB | Resources in one AZ on private addresses | Keep hot internal traffic same-AZ and private |
| S3 or DynamoDB from a private subnet | $0 with an endpoint vs ~$0.045/GB through NAT | Default route goes out through NAT | Gateway VPC endpoint (free) |
| Other AWS APIs (ECR, CloudWatch, Secrets Manager) through NAT | ~$0.045/GB through NAT vs ~$0.01/GB with an endpoint | AWS service reached over the public path | Interface endpoint (PrivateLink) |
| Cross-AZ service chatter (app to database or cache) | ~$0.01/GB each direction | Services split across AZs, talking constantly | Same-AZ placement for hot pairs |
| Internet egress straight from EC2, ALB or S3 | ~$0.09/GB (first tier) | Serving users from the origin | CloudFront in front |
| Cross-account service traffic | NAT plus internet egress | Reaching another VPC over the public path | PrivateLink |
| Inter-Region replication | ~$0.02/GB, continuously | Replication for DR or latency | Scope it and compress |
| Internet egress through NAT | ~$0.045 NAT plus ~$0.09 internet | Private subnet sending real internet traffic | Compress; use NAT only for real internet egress |
| Upload with S3 Transfer Acceleration | Normal transfer plus an acceleration fee | Turned on for speed | Use it only when upload latency matters |
You fill in a short form: what you run today, what you want to move, test or build, your stage and your region.
We read your answers and pick one vetted AWS consulting partner that fits the work, the stack and the region. We reply within 24 hours; your matched partner reaches out within 5 business days.
Your matched partner scopes the work with you. Then it checks which partner-filed funding fits: MAP if you are moving to AWS, POC if you want to test something, or incremental workload (IW) funding if you are already on AWS and launching new work.
If the work qualifies, the partner files the funding request with AWS. AWS reviews it and decides. The amount depends on the workload.
CloudRoute is free for startups. Partners pay CloudRoute a monthly membership plus 10% of AWS-approved funding.
AWS Activate credits are separate, and you apply for them yourself. Use Activate Founders if no investor backs you. Use Activate Portfolio with the Org ID or invite from your VC, accelerator, incubator or angel group if it is an Activate Provider. A consulting partner cannot apply for Activate on your behalf.
CloudRoute matches you with a vetted AWS partner who maps your transfer spend in the CUR, moves it to the cheap paths and adds CloudFront where it pays. If the work is part of a migration, a test or new work on AWS, the partner also checks MAP, POC or IW funding: typically $50K to $150K for startups. Depends on the workload; AWS approves. CloudRoute is free for startups.