Which one is best to use NAT instance or NAT gateway?
You can use a network address translation (NAT) instance in a public subnet in your VPC to enable instances in the private subnet to initiate outbound IPv4 traffic to the Internet or other AWS services, but prevent the instances from receiving inbound traffic initiated by someone on the Internet.
You can also use a NAT gateway, which is a managed NAT service that provides better availability, higher bandwidth, and requires less administrative effort
Which one best to use?
Now question is which one is better and cost effective. It’s purely depends on requirements.
If you are having very small environment assume below 50 servers and you have requirements servers should have access to internet for all servers and very minimum access to internet ex only for downloading latest patch softwares etc its okay to use NAT instance.
Again in same 50 servers need to access internet heavily NAT instance will not workout. Because all the traffic should go through one instance. You should provision high end instance type and you need to plan for high availability. Again data transfer is chargeable.
If you have medium or larger environments more than 50 servers or having high internet usage better to use NAT gateway. Because it’s AWS managed service no constraints about bandwidth and high availability.
How to Implement
NAT instance can be created from public NAT AMI which you can easily search in AWS console.
NAT gateway you can easily create with clicks in console.
Remember both NAT instance and NAT gateway both should be placed in public subnet.