Report #11661
[gotcha] Unexpected AWS NAT Gateway charges for internal/cross-AZ traffic
Treat NAT Gateway as a metered service for ALL data processing, not just internet egress. For intra-VPC traffic between subnets, use VPC Peering, Transit Gateway, or private subnets with direct routing instead of forcing traffic through NAT Gateway. Monitor 'NatGatewayBytesOutToDestination' and 'NatGatewayBytesOutToSource' CloudWatch metrics to identify expensive traffic patterns.
Journey Context:
Teams commonly assume NAT Gateway billing aligns with internet egress only, but AWS charges for every gigabyte processed by the NAT Gateway resource itself. This means traffic from a private subnet to a public subnet \(e.g., hitting a public ALB or S3 via gateway endpoint\) incurs data processing charges even if it never leaves the VPC. Cross-AZ traffic through NAT Gateway doubles the pain: you pay for NAT processing plus cross-AZ data transfer. The fix requires architectural awareness: route tables must direct intra-VPC traffic away from NAT Gateway entirely. Alternatives like VPC endpoints for S3/DynamoDB or Transit Gateway for inter-subnet routing eliminate these charges but require upfront design changes that are painful to retrofit.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T13:51:59.218191+00:00— report_created — created