Perhaps one of the best features of AWS is Virtual Private Cloud (VPC).
In essence, VPC is a virtual network that you can divide into subnets. Some subnets can be public (with access to the internet), and some are private. You can define routing between subnets, and by default, they can freely access each other. You can also create VPN to your VPC, add NAT gateways, manage DHCP options, and define ACLs for your networks. VPC is a complex service with many subtools and options. For our purpose, we will use only a subset of them though.
Typical use case for VPC: Keeping publicly accessible web servers in public subnets and database servers in private ones, and enabling a secure connection between cloud resources and on-premise machines.
Security groups are also a part of AWS VPC. With security groups, you can define inbound and outbound firewall...