AWSCost

AWS cost · cross-AZ traffic

Cross-AZ data transfer: the $0.01/GB charge draining HA setups

You did the responsible thing and spread your services across Availability Zones. That is the standard advice for staying up when one AZ has a bad day. Nobody mentions the meter it starts. Every request that crosses from one AZ to another costs $0.01/GB, and the reply crossing back costs another $0.01/GB. At a fraction of a cent it feels like nothing - until you have services chatting across AZs millions of times a day, and the total quietly passes $1,000/month. The setup that keeps you online is also billing you to talk to yourself.

Traffic between Availability Zones costs $0.01/GB each way - $0.02 per GB round trip. Only traffic inside a single AZ on private IPs is free. A high-availability setup spread across AZs pays this on every cross-zone request, and a chatty fabric can run $1,000+/month. Keep services that talk to each other in the same AZ, and the charge goes away.

Where does cross-AZ traffic come from?

The usual sources, all billing $0.01/GB each way:

SourceCostNote
Microservices chatting across AZs$0.02/GB round tripthe classic leak - services spread for HA, talking constantly
RDS Multi-AZ replication$0.01/GB each waythe standby in another AZ, kept in sync
EKS pod-to-pod across AZs$0.02/GB round trippods scheduled without AZ awareness
NLB with cross-zone enabled$0.01/GB each wayoff by default - turning it on adds the charge

Two of those sources have their own breakdowns: RDS Multi-AZ replication and the EKS pod-to-pod chatter that comes with spreading nodes across zones.

Why is cross-AZ traffic so easy to miss?

Because it never appears as its own line. Cross-AZ charges fold into EC2-Other under a usage type ending in DataTransfer-Regional-Bytes, buried alongside EBS and snapshots. There is no “cross-AZ” heading to alarm anyone. It is the same disappearing act the rest of AWS data transfer pulls - scattered charges that no single line adds up for you.

How do I cut cross-AZ data transfer?

Co-locate what talks. Services that chat constantly belong in the same AZ, so their traffic never crosses a $0.01/GB boundary - you keep multi-AZ redundancy at the tier that needs it without paying for chatter at every tier. For stateless targets behind a Network Load Balancer, leaving cross-zone load balancing off keeps requests in-zone. One place this is a quick, safe win is any NLB where cross-zone was switched on without needing to be - this checks the setting, then turns it off:

# is cross-zone load balancing on for this NLB?
aws elbv2 describe-load-balancer-attributes \
  --load-balancer-arn <your-nlb-arn> \
  --query "Attributes[?Key=='load_balancing.cross_zone.enabled']"

# turn it off (stateless targets only) to keep traffic in-zone
aws elbv2 modify-load-balancer-attributes \
  --load-balancer-arn <your-nlb-arn> \
  --attributes Key=load_balancing.cross_zone.enabled,Value=false

Want to know how much of your bill is services talking across AZs? 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

How much does cross-AZ data transfer cost on AWS?+

$0.01/GB in each direction between Availability Zones in the same region - so $0.02 per GB for a full round trip. It applies to almost anything that talks across AZs: EC2 to EC2, RDS Multi-AZ replication, ElastiCache, and EKS pod-to-pod traffic.

Why am I being charged for traffic inside my own region?+

Because 'inside the region' is not the same as 'inside the AZ'. Only traffic within a single Availability Zone on private IPs is free. The moment a request crosses to another AZ - which high-availability setups do constantly - it costs $0.01/GB each way.

Does a multi-AZ setup increase data transfer costs?+

Yes. Spreading services across AZs is the right call for availability, but every cross-AZ request now bills $0.01/GB each way. A chatty microservice fabric at moderate scale can quietly run over $1,000/month in cross-AZ charges alone.

Is ALB cross-zone load balancing free?+

Yes. Application Load Balancers always do cross-zone load balancing and AWS does not charge for the cross-AZ traffic between the ALB and its targets. Network Load Balancers are different: cross-zone is off by default, and enabling it adds the $0.01/GB each-way charge.

How do I reduce cross-AZ data transfer costs?+

Keep services that talk to each other in the same AZ (AZ affinity), so their traffic never crosses a boundary. For stateless workloads behind an NLB, leaving cross-zone load balancing off keeps traffic in-zone. And check whether a Multi-AZ database is needed for a non-production workload - Single-AZ removes the replication traffic entirely.

Should I disable cross-zone load balancing to save money?+

On a Network Load Balancer, often yes - for stateless targets, leaving it off keeps traffic in the same AZ and avoids the cross-AZ charge with no real downside. On an ALB you cannot disable it, but ALB cross-zone traffic is not charged, so there is nothing to save there.

Where does cross-AZ traffic show up on my bill?+

It hides inside EC2-Other, usually under a usage type ending in 'DataTransfer-Regional-Bytes'. There is no line that says 'cross-AZ', which is exactly why it goes unnoticed for so long.

Related cost breakdowns

More AWS cost breakdowns