- Architecture Overview
- Project Status
- Project Structure
- Technologies Used
- Prerequisites
- Testing
- Notes
- Upcoming Enhancements
- Deployment Screenshots
- RDS Tier Database Layer
- App Tier Backend Flask API
- Web Tier Apache Frontend
This project demonstrates a fully functional 3-tier web application infrastructure deployed on AWS using CloudFormation.
[Web Tier - Public EC2 with Apache]
|
[App Tier - Private EC2 with Flask]
|
[Database Tier - RDS MySQL in Private Subnet]
- ✅ Database Tier (RDS) deployed successfully
- ✅ App Tier (Flask App) EC2 instance configured
- ✅ Web Tier (Apache) EC2 instance live with HTML page
- ⏳ Reverse Proxy from Apache to Flask App
cloudformation-templates/
├── db-tier.yaml
├── app-tier.yaml
└── web-tier.yaml
assets/
├── architecture/
│ └── architecture.png
└── screenshots/
└── screenshot.png
- AWS CloudFormation
- Amazon EC2
- Amazon RDS (MySQL)
- Flask (Python Web Framework)
- Apache Web Server (httpd)
- AWS CLI Configured
- Valid SSH Key Pair (e.g.,
bus.keyon your local machine) - Python 3 & Flask installed (for App Tier)
To test the app end-to-end:
-
SSH into the Web Tier:
ssh -i ~/Desktop/ec2-key ec2-user@<Web-Tier-Public-IP>
-
Confirm Apache is running:
curl http://localhost
-
Set up reverse proxy to App Tier (Private IP on port 8080) by editing the Apache config:
sudo nano /etc/httpd/conf.d/proxy.conf
-
Access from browser:
http://<Web-Tier-Public-IP>
This section captures the deployment of the Database Tier using AWS CloudFormation. The screenshots include the RDS MySQL instance creation process, event logs, output values, deployed resources, and the associated CloudFormation template.
These screenshots highlight the Application Tier deployment. You’ll see the creation of the private EC2 instance running a Flask application, the CloudFormation template used, and the testing process to confirm backend functionality.
This section showcases the Web Tier, where a public EC2 instance is launched and configured with Apache. The images demonstrate the deployment events, resources created, and successful integration with the other tiers.
- Use
python3 -m http.server 8080on App Tier for quick testing
Enable HTTPS with Let's Encrypt Use Route 53 for DNS management Add Auto Scaling & Load Balancing
Author: Emma – AWS Junior Solution Architect