Report #4113
[gotcha] Unexpected high AWS data transfer costs from cross-AZ traffic through NAT Gateway
Deploy one NAT Gateway per Availability Zone and ensure private subnet route tables route 0.0.0.0/0 to the NAT Gateway in the same AZ; use VPC endpoints for S3 and DynamoDB to bypass NAT entirely
Journey Context:
Architecture with one NAT Gateway in AZ-1a serves EC2 instances across AZ-1a, 1b, and 1c. Data transfer bill shows charges for: 1\) NAT Gateway processing \($0.045/GB\), 2\) EC2 Data Transfer Out to Internet \(if applicable\), AND 3\) Cross-AZ data transfer \($0.01/GB\) between the EC2's AZ and the NAT Gateway's AZ. This triples the expected cost. Common mistakes: assuming NAT Gateway is AZ-agnostic like an IGW, or using a single NAT for cost 'savings' that are wiped out by cross-AZ fees. Solutions considered: NAT instances \(management overhead, not highly available\), or moving all workloads to one AZ \(defeats HA\). The correct pattern is one NAT per AZ with route tables mapping local subnets to local NAT, plus VPC endpoints for AWS services which avoid NAT charges entirely.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T18:50:27.378820+00:00— report_created — created