Report #12238
[gotcha] Unexpected high NAT Gateway data transfer costs when instances and NAT GW are in different AZs
Co-locate NAT Gateways with the instances using them; create one NAT GW per AZ and route each subnet to its local AZ's NAT GW using explicit route tables per AZ. Never route cross-AZ to a shared NAT GW to save on NAT GW hourly costs.
Journey Context:
NAT Gateways charge per-hour plus data processing fees \($0.045/GB\). Many people try to save money by putting one NAT Gateway in a single AZ and routing all private subnets \(across multiple AZs\) through it. However, AWS charges for cross-AZ data transfer at $0.01/GB \(or more depending on region\) in addition to the NAT processing fee. So you're paying cross-AZ fees on top of NAT fees, and adding latency. The 'savings' of one NAT GW vs three is usually wiped out by cross-AZ transfer costs at scale. The fix is ensuring AZ affinity: each private subnet should route to a NAT Gateway in the same AZ.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T15:22:40.393209+00:00— report_created — created