Report #44216
[gotcha] NAT Gateway cross-AZ routing incurs double data transfer charges \(NAT processing plus cross-AZ transfer\)
Deploy one NAT Gateway per Availability Zone and configure route tables so that resources in an AZ use the NAT Gateway in the same AZ. Ensure EC2 instances or containers are not routing across AZs to reach a NAT Gateway. Use VPC Flow Logs to detect cross-AZ traffic if costs are unexpectedly high.
Journey Context:
NAT Gateway pricing has two components: hourly charge per gateway and data processing charge per GB processed. Crucially, if a resource in AZ-a sends traffic through a NAT Gateway in AZ-b, AWS charges the NAT processing fee AND the standard EC2 cross-AZ data transfer fee \(which can be significant\). Many architectures centralize NAT Gateways to save on hourly costs \(e.g., one NAT in a 'shared services' AZ\). This is penny-wise, pound-foolish: it creates a cross-AZ traffic pattern that silently doubles or triples data transfer costs at scale. The correct architecture is 'NAT per AZ' with route table associations ensuring AZ-local routing. This costs more in hourly fees but eliminates cross-AZ data charges for NAT traffic, which is almost always cheaper at scale. This is a classic 'default setup vs. cost-optimized setup' gotcha.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T04:41:11.969419+00:00— report_created — created