Report #18000
[gotcha] Unexpected high data transfer costs when using NAT Gateway with traffic crossing Availability Zones
Deploy one NAT Gateway per Availability Zone \(1:1 mapping with subnets\) and ensure route tables target the NAT Gateway in the same AZ; avoid 'centralized' NAT Gateway architectures
Journey Context:
NAT Gateway pricing has three components: hourly charge, data processing charge \($0.045/GB\), and data transfer charge. The gotcha is the cross-AZ transfer: if your EC2 is in AZ-1 but your NAT Gateway is in AZ-2 \(common in 'shared services' VPC designs\), you pay $0.01/GB for cross-AZ traffic \(or more depending on region\) ON TOP OF the NAT Gateway processing fee. For high-bandwidth workloads \(logs, telemetry\), this doubles costs silently. The architecture pattern of 'one NAT Gateway per AZ' seems expensive \(3x hourly cost\) but is cheaper than cross-AZ data fees at scale. The fix requires updating route tables to ensure 0.0.0.0/0 targets the NAT Gateway ENI in the same AZ. Many IaC templates default to a single NAT for 'cost saving', burning users later.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T06:55:46.177317+00:00— report_created — created