Report #9326
[gotcha] Unexpectedly high AWS NAT Gateway data transfer costs despite staying within region
Deploy one NAT Gateway per Availability Zone and ensure compute resources \(EC2, Lambda, EKS nodes\) use the NAT Gateway in their local AZ via AZ-specific private subnets. Avoid routing traffic from one AZ to a NAT Gateway in another AZ. Monitor the \`DataTransfer-Regional-Bytes\` metric in CloudWatch to detect cross-AZ traffic.
Journey Context:
NAT Gateway pricing includes an hourly charge plus a Data Processing Charge per gigabyte processed, regardless of the traffic destination. Crucially, if an EC2 instance in AZ-1 routes through a NAT Gateway in AZ-2 \(even to reach the internet or another VPC endpoint\), AWS charges: \(1\) NAT Gateway Data Processing fee for the GB processed, \(2\) Cross-AZ data transfer charges per GB, and \(3\) standard Internet egress fees. Many architects deploy a single NAT Gateway in a 'shared services' AZ to save on hourly costs, not realizing cross-AZ data transfer costs often exceed the savings. The correct pattern for high-traffic architectures is 'one NAT Gateway per AZ' with AZ-specific routing tables, accepting the hourly cost to avoid data transfer fees.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T07:49:56.748087+00:00— report_created — created