Cross-AZ vs cross-region data transfer cost: the two hidden network taxes
Traffic between availability zones costs about $0.01 per GB each way, while traffic between regions runs roughly $0.02 per GB or more. Both are easy to trigger accidentally and both compound at scale. Here is how the two taxes differ and how to avoid them.
Quick answer
AWS charges for data crossing availability zone and region boundaries. Cross-AZ traffic costs about $0.01 per GB in each direction, so a round trip between two zones is about $0.02 per GB. Cross-region traffic costs more, roughly $0.02 per GB and up depending on the regions, and internet egress is higher still at about $0.09 per GB. Both taxes trigger silently when an application talks to a database, cache, or service in a different zone or region. The defense: keep chatty components in the same availability zone and region wherever redundancy allows, because co-location is nearly free while every boundary crossing bills per GB.
Two of the most common surprise line items on an AWS bill are inter-AZ and inter-region data transfer. Both are per-GB charges that appear whenever traffic crosses a boundary, and both are easy to trigger without realizing it, because the code looks the same whether the database is in the same zone or the next one. The rates differ, and so do the ways you avoid them.
The two rates side by side
| Traffic type | Approximate rate | Common trigger |
|---|---|---|
| Same AZ, private IP | Free | Co-located resources |
| Cross-AZ | ~$0.01/GB each direction | App and database in different zones |
| Cross-region | ~$0.02/GB and up | Replication, multi-region designs |
| Internet egress | ~$0.09/GB | Serving users, external APIs |
Traffic within a single availability zone over private IPs is free. Cross the zone boundary and you pay about $0.01 per GB in each direction, so a request-and-response round trip costs roughly $0.02 per GB total. Cross the region boundary and the rate rises to about $0.02 per GB and up, depending on the source and destination regions. Internet egress is the most expensive at about $0.09 per GB for the first tier.
How cross-AZ charges sneak in
Cross-AZ cost is the quieter of the two because AWS encourages spreading resources across zones for resilience, and that resilience has a traffic cost. An application server in zone A querying a database in zone B pays cross-AZ both ways on every query. A Kafka or Cassandra cluster replicating across three zones pays cross-AZ on all replication traffic. At a terabyte a day of cross-AZ chatter, the $0.02 per GB round trip is about $600 a month for traffic that stayed inside one region. The inter-AZ transfer guide covers this in depth.
How cross-region charges add up
Cross-region cost usually comes from deliberate architecture: replicating a database to a second region for disaster recovery, serving a multi-region application, or copying data between regions. Because the rate is higher and the volumes in replication can be large, cross-region transfer can become a major line item. A multi-region active-active design pays cross-region on every synchronization, which is why multi-region designs carry a real ongoing tax on top of the duplicated infrastructure.
Cutting both taxes
For cross-AZ, co-locate chatty components in the same zone where your redundancy model allows, use zone-aware clients that prefer same-zone endpoints, and be deliberate about which traffic truly needs to cross zones for resilience. For cross-region, minimize the data replicated, compress it, and question whether the second region's benefit justifies the ongoing transfer cost. Both are among the unexpected charges that compound silently, and both respond to the same principle: keep data close to the compute that uses it.
Because these charges depend on architecture, they are best caught at design time when you can still change where components sit. Price your topology against the resource catalog so the cross-AZ and cross-region transfer is a known number before the traffic starts flowing.
FAQ
How much does cross-AZ data transfer cost?
About $0.01 per GB in each direction, so a request-and-response round trip between two availability zones costs roughly $0.02 per GB total. It triggers whenever an application talks to a database, cache, or service in a different zone. At a terabyte a day of cross-AZ traffic, that is about $600 a month for data that never left the region.
How much does cross-region data transfer cost?
Roughly $0.02 per GB and up, depending on the source and destination regions, which is more than cross-AZ. It usually comes from deliberate architecture like database replication to a second region for disaster recovery or serving a multi-region application. Because replication volumes can be large and the rate is higher, cross-region transfer can become a major bill line.
Is data transfer within an availability zone free?
Yes, traffic between resources in the same availability zone over private IP addresses is free. This is why co-locating chatty components in the same zone is the cheapest option: same-zone private traffic costs nothing, while every crossing of a zone or region boundary bills per GB. Using public IPs even within a zone, however, incurs charges, so use private addressing.
Why is cross-AZ cost easy to miss?
Because AWS encourages spreading resources across zones for resilience, and the code looks identical whether the database is in the same zone or the next one. An app querying a database in another zone pays cross-AZ on every round trip silently. Clustered systems replicating across zones pay it on all replication traffic. The charge accumulates without any obvious signal until it appears on the bill.
How do I reduce data transfer costs across zones and regions?
For cross-AZ, co-locate chatty components in the same zone where redundancy allows, use zone-aware clients that prefer same-zone endpoints, and be deliberate about which traffic truly needs to cross zones. For cross-region, minimize and compress replicated data and question whether the second region's benefit justifies the ongoing transfer cost. The principle for both is keeping data close to the compute that uses it.
How does C3X help with data transfer cost?
C3X prices your topology from Terraform before you deploy, so cross-AZ and cross-region data transfer implications are visible in the pull request. Because these charges depend on where components sit, catching them at design time lets you co-locate chatty resources and reconsider multi-region replication before the per-GB traffic starts flowing and compounds on the monthly bill.
What to do next
Catch cross-AZ and cross-region transfer cost before you deploy. C3X reads your Terraform and prices your resources against a live catalog. Start with the quickstart.
Related posts
- Inter-AZ data transfer cost: the charge hiding inside your VPC
Traffic between availability zones inside the same region is not free. At roughly a cent per GB in each direction, cross-AZ transfer quietly adds up for chatty microservices, replicated databases, and Kafka clusters. Here is how it is billed and how to cut it.
- Bulk data migration transfer cost: network, appliance, or both
Moving tens or hundreds of terabytes into or out of a cloud has three viable paths with very different economics. The right one depends on volume, deadline, and available bandwidth. Here is the comparison.
- Private IP vs public IP data transfer cost: the free path you might be missing
Traffic between resources over private IPs in the same AZ is free, but the same traffic over public or Elastic IPs is charged even within a region. Using the wrong address turns free traffic into a per-GB bill. Here is how to keep it free.
- Cross-region replication cost: what copying data between regions really costs
Replicating data across regions for durability or latency adds cross-region data transfer charges plus duplicated storage, and the transfer is often the bigger surprise. Here is how cross-region replication is priced and how to control it.
Share this post
Try C3X on your own Terraform
Free and open source. No API key required. One command to install, one command to estimate.