About the Project
This project demonstrates a fully automated AWS web application deployment using CloudFormation. It includes:
- VPC with two public subnets across multiple Availability Zones
- Internet-facing Application Load Balancer (ALB)
- Auto Scaling Group (ASG) with EC2 instances running Amazon Linux 2 and Apache
- Dynamic AMI retrieval via SSM for region independence
The project is designed for high availability and scalability, with EC2 instances automatically replaced if unhealthy.
GitHub Repository
All code, CloudFormation templates, and scripts are available on GitHub:
Key Features Demonstrated
- Infrastructure as Code (CloudFormation)
- Load Balancing & Health Checks
- Auto Scaling (with EC2 instance replacement)
- Security groups & networking best practices
- UserData scripting for automated EC2 setup
SSH access to EC2 instances is possible for demonstration purposes, but the project is fully deployable without manual intervention.
Notes / Lessons Learned
- Encountered a few challenges creating the CloudFormation stack due to AMI IDs and KeyName parameters, resolved using dynamic AMI and no SSH key.
- No tagging was initially implemented — could be added for resource tracking and cost management.
- Demonstrates practical AWS skills suitable for cloud architect or DevOps roles.
Live Demo
The web page served by the stack displays a simple message:
Hello, Manchester United!
Accessible via the ALB DNS after stack creation.
🚀 Auto Scaling Group (ASG) Test
To demonstrate that the Mini Web App scales under load, I performed a simple load test against the Application Load Balancer (ALB).
ALB URL: MiniWebALB-1107566933.eu-west-2.elb.amazonaws.com
Load Test
I used Apache Bench (ab) to simulate 500 requests with 10 concurrent connections:
ab -n 500 -c 10 http://MiniWebALB-1107566933.eu-west-2.elb.amazonaws.com/
Results:
- Requests completed: 500
- Requests per second: ~105
- Average response time: ~95 ms
- Some requests failed initially — this was expected as new instances were being launched.
Auto Scaling Reaction
The Auto Scaling Group (ASG) detected the increased load and automatically launched two new EC2 instances to handle traffic. Desired capacity changed from 0 → 2, and the ALB started routing traffic to both instances.
Launching a new EC2 instance: i-040f108e7af753f1d
Launching a new EC2 instance: i-06f9bf8094de8126a
Verification
Refreshing the ALB URL in your browser shows different hostnames from multiple instances:
Hello, Manchester United!
Hostname: ip-10-0-2-237.eu-west-2.compute.internal
AZ: eu-west-2b
This confirms traffic is distributed across multiple AZs and instances.
Portfolio Notes
- Demonstrates Auto Scaling under real load.
- Shows ALB routing across multiple EC2 instances.
- Proves CloudFormation deployment is working correctly.