Automated cloud deployment demonstrating containerization, infrastructure as code, and CI/CD best practices.
A Flask web application with complete automation from code to cloud:
- ✅ Dockerized Flask app with Prometheus metrics instrumentation
- ✅ AWS infrastructure provisioned via Terraform (VPC, EC2, ECR, IAM)
- ✅ Automated CI/CD pipeline using GitHub Actions
- ✅ Monitoring with Prometheus integration
GitHub Push → GitHub Actions → Build Docker Image → Push to ECR → Deploy to EC2
AWS Resources Created:
- VPC with public subnet and Internet Gateway
- EC2 instance (t3.micro) with Docker pre-installed
- ECR repository with image scanning enabled
- IAM roles and security groups
Local Development:
# With Docker
docker build -t nordhealth-app:latest .
docker run --rm -p 5000:5000 nordhealth-app:latestDeploy Infrastructure:
cd aws-resources-terraform
terraform init
terraform applyAccess:
- App: http://localhost:5000/
- Metrics: http://localhost:5000/metrics
GET /- Hello World with request timingGET /metrics- Prometheus metrics (request duration histogram & gauge)
GitHub Actions workflow automatically:
- Builds Docker image on push to
main - Pushes to AWS ECR with Git SHA tag
- SSH into EC2 and deploys latest container
Application endpoint with request timing
Prometheus metrics endpoint
Infrastructure provisioned via Terraform
Application: Python 3.12, Flask 3.1.2, prometheus_client
Containerization: Docker, Docker Compose
Cloud & IaC: AWS (EC2, ECR, VPC, IAM), Terraform
CI/CD: GitHub Actions
├── main.py # Flask app with Prometheus metrics
├── Dockerfile # Alpine-based container image
├── .github/workflows/deploy.yml # CI/CD pipeline
└── aws-resources-terraform/ # Complete AWS infrastructure
├── main.tf
├── variables.tf
└── outputs.tf
Built as a demonstration of modern DevOps practices and cloud-native development.



