cfn-cheapest-nat icon indicating copy to clipboard operation
cfn-cheapest-nat copied to clipboard

Cheapest AWS VPC NAT.

cfn-cheapest-nat

build status

Cheapest AWS VPC NAT solution for personal projects.

Context

The current solutions is:

  • EC2 running on Spot.
  • Auto Healing
    • automatically replaces the unhealthy instance.
    • re-attaches a persistent network interface to recover transport level details such as routes.

The solution is not:

  • Highly Available
    • instance unavailability will cause NAT disruption.
  • Fault Tolerant
    • the persistent network interface results in dependency on a single zone.

Logical Diagram

Logical Diagram

Deploy

STACK_NAME=examples-nat \
PRIVATE_ROUTE_TABLES=rtb-0eee90cf29e333813,rtb-0c1d060b614e74b88 \
PUBLIC_SUBNET=subnet-03ad595bb28ce7679 \
  ./bin/deploy

Testing

I use the AWS System Manager Session Manager to SSH into an instance in a private subnet utilizing the NAT and run:

yum install python python-pip -y \
 && pip install --upgrade pip \
 && pip install speedtest-cli \
 && speedtest-cli
Retrieving speedtest.net configuration...
Testing from Amazon.com (54.206.26.162)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by Telstra (Sydney) [1.01 km]: 1.82 ms
Testing download speed................................................................................
Download: 3283.42 Mbit/s
Testing upload speed................................................................................................
Upload: 2274.26 Mbit/s

Costs

solution network cost/GB cost/hour** cost/month**
NAT Gateway 5-45 Gbps 0.059 0.059 42.48
NAT Instance (t3a.nano) 0-5 Gbps 0-0.114 0.0059 4.25
NAT Instance (t3a.nano) (spot) 0-5 Gbps 0-0.114 0.0018* 1.30*

* variable costs.

** region ap-southeast-2.

AMI

Documentation

Configuration

  • /etc/sysctl.d/10-nat-settings.conf
  • /usr/sbin/configure-pat.sh