is a more modern way of doing things.
It's fully managed by AWS and you get scalability up to 45 Gbps, and provides higher availability.
They do not support port forwarding and cannot be used as bastion hosts.
You cannot attach an Internet gateway to a private subnet. Internet Gateways are attached to VPCs and entries are added to route table in public subnets.
A NAT Gateway provides high availability and automatic scaling. You attach a NAT Gateway to a public subnet and then add a route to it in the private subnet. By doing this the private instances can have internet connectivity.