Report #13302
[gotcha] Unexpected high AWS NAT Gateway charges despite low traffic volume
Minimize cross-AZ traffic \(ensure instances and NAT Gateways are in the same AZ\), use VPC endpoints for S3 and DynamoDB to bypass NAT Gateway entirely, consider using a self-managed NAT instance \(t3.small/t3.medium\) for predictable low-bandwidth workloads, or migrate to IPv6 \(NAT Gateway not needed for IPv6 egress\).
Journey Context:
AWS NAT Gateway pricing has two components: hourly charge \(~$0.045/hr\) and data processing charge \(~$0.045 per GB processed\), regardless of the destination. Many engineers calculate costs based only on the hourly rate or assume data transfer is free within the same region. The real shock comes from the 'per GB processed' charge—every packet that traverses the NAT Gateway incurs this fee, including health checks, DNS queries, and metadata service calls. If you have a fleet of EC2 instances in private subnets downloading from S3, and you haven't set up VPC endpoints, all that traffic goes through the NAT Gateway \(expensive\). Worse, if your instances are in AZ-1a but your NAT Gateway is in AZ-1b \(or you use a single NAT Gateway for multiple AZs\), you pay cross-AZ data transfer \(~$0.01/GB\) on top of the NAT processing fee. The fixes: 1\) Use VPC endpoints \(Gateway or Interface\) for AWS services to bypass NAT entirely. 2\) Place NAT Gateways in the same AZ as your workloads to avoid cross-AZ charges. 3\) For small/static workloads, a t3.nano NAT instance with iptables is cheaper despite the management overhead. 4\) IPv6 egress doesn't require NAT \(though you need an egress-only internet gateway for IPv6\).
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T18:20:37.494408+00:00— report_created — created