This project provisions a 2-tier AWS architecture using Terraform modules.
It demonstrates how to design Infrastructure as Code (IaC) with best practices: reusable modules, variables, outputs, and bootstrap automation.
The setup creates:
- Networking (VPC + subnets + routing)
- Security (web & db security groups)
- Compute (EC2 instances for web & db)
- Bootstrap (Apache web server auto-configured via user_data)
- VPC (10.0.0.0/16) β isolated network
- Public Subnet (10.0.1.0/24) β hosts Apache web server
- Private Subnet (10.0.2.0/24) β hosts DB instance (no public IP)
- Internet Gateway (IGW) β internet access for public subnet
- NAT Gateway (optional) β outbound internet for private subnet
- Security Groups β
- Web SG β HTTP (80), SSH (22)
- EC2 Instances β
- Web (public subnet) β Apache auto-installed via
user-data.sh - DB (private subnet) β no public IP, backend-only
- Web (public subnet) β Apache auto-installed via
terraform-vpc-ec2-apache-modular/
βββ main.tf # Root module wiring (calls submodules)
βββ versions.tf # Terraform + provider requirements
βββ provider.tf # AWS provider
βββ variables.tf # Input variables
βββ outputs.tf # Output values
βββ user-data.sh # Bootstrap script (Apache install + HTML)
βββ .gitignore
βββ README.md
β
βββ modules/ # Reusable modules
βββ vpc/ # VPC, subnets, IGW, NAT, routes
βββ security/ # Web + DB security groups
βββ ec2/ # Web + DB EC2 instances