Report #66755
[gotcha] AWS NAT Gateway cross-AZ data transfer causes 2x\+ hidden cost explosion
Provision one NAT Gateway per Availability Zone and force subnet route tables to target only the NAT Gateway residing in the same AZ \(e.g., subnet us-east-1a → NAT-GW-us-east-1a\); never route traffic from one AZ through a NAT Gateway in another AZ. Accept the higher hourly cost of multiple NAT GWs as a necessary insurance against data-transfer charges.
Journey Context:
NAT Gateway pricing has three components: hourly charge \(~$0.045/hr\), data processing charge \($0.045/GB\), and implicit data transfer charges. Architects often deploy a single NAT Gateway per region to save on hourly charges, assuming that 'data transfer within the same region is free.' This is false: cross-AZ traffic costs $0.01/GB each direction. If an EC2 instance in us-east-1a \(no public IP\) sends 1TB of outbound traffic through a NAT Gateway located in us-east-1b, you pay: $0.01/GB cross-AZ transfer \($10\) \+ $0.045/GB NAT processing \($45\) = $55, versus $45 if the NAT GW were in the same AZ. At scale \(e.g., microservices with high east-west then north-south traffic\), this cross-AZ multiplier dominates bills. The fix—one NAT GW per AZ—increases hourly cost linearly with AZ count, but eliminates cross-AZ transfer, which is always cheaper for non-trivial data volumes. Trade-off: Multiple NAT GWs reduce single-point-of-failure risk but increase management complexity and baseline cost for low-traffic environments.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T18:31:40.019517+00:00— report_created — created