Report #14035
[gotcha] Unexpectedly high data transfer charges when using NAT Gateway in different AZ than EC2 instances \(cross-AZ bill shock\)
Deploy NAT Gateways in the same Availability Zone as the EC2 instances, Lambda functions, or EKS nodes that use them. For multi-AZ architectures, deploy one NAT Gateway per AZ and configure route tables so that subnets in AZ-1 use the NAT Gateway in AZ-1 only. Monitor 'NatGatewayBytesOutToDestination' and 'Inter-AvailabilityZoneOutBytes' to detect leakage.
Journey Context:
NAT Gateway pricing includes an hourly charge, a data processing charge \($0.045/GB\), and data transfer out charges. However, if the NAT Gateway is in AZ-1 and the instance is in AZ-2, AWS also charges for inter-AZ data transfer \($0.01-$0.02/GB\) on top of the NAT processing fee. This is not obvious because the NAT Gateway pricing page focuses on the processing fee. Teams often deploy a single NAT Gateway in one AZ to 'save money' on hourly charges for dev/test environments, or centralize them for 'security', but the cross-AZ data transfer costs for multi-AZ architectures dwarf the savings. The correct pattern is 'one NAT Gateway per AZ' with AZ-specific routing tables.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T20:24:22.485840+00:00— report_created — created