A production-grade microservices application deployed on AWS EKS with automated CI/CD using GitHub Actions — demonstrating end-to-end DevOps engineering on AWS.
Managing a monolithic application makes independent scaling, deployment, and maintenance difficult. This platform breaks the application into independently deployable microservices — each with its own database schema, Dockerfile, and Kubernetes deployment — enabling zero-downtime deploys, horizontal scaling per service, and isolated failure domains.
┌─────────────────────────────────────────────────────────────┐
│ AWS EKS Cluster │
│ (us-west-2, K8s 1.31) │
│ │
│ ┌────────────┐ ┌────────────┐ ┌────────────────────┐ │
│ │ Frontend │ │ Auth │ │ Post Service │ │
│ │ React+Vite │───▶│ Service │ │ (CRUD Blog Posts) │ │
│ │ Nginx │ │ Port 3001 │ │ Port 3002 │ │
│ └────────────┘ └─────┬──────┘ └────────────────────┘ │
│ │ │
│ ┌────────────────┐ ┌───▼──────────────────────────────┐ │
│ │Comment Service │ │ MySQL (per service) │ │
│ │ Port 3003 │ │ auth-db / post-db / comment-db │ │
│ └────────────────┘ └──────────────────────────────────┘ │
│ │
│ Node Groups: 3x t3.medium | Auto Scaler + ALB Ingress │
└─────────────────────────────────────────────────────────────┘
│
▼
GitHub Actions CI/CD
Build → Push ECR → Deploy to EKS
Architecture HTML diagram available at:
architecture-diagram.html
- 3 independent microservices — Auth Service (JWT-based login/register), Post Service (CRUD blog posts), Comment Service (CRUD comments) — each isolated with its own MySQL schema via Prisma ORM
- AWS EKS cluster provisioned using
eksctlwith managed node groups (3x t3.medium), VPC CNI, CoreDNS, kube-proxy addons - IAM addon policies for Auto Scaler, ALB Ingress, and CloudWatch logging enabled at cluster level
- CloudWatch cluster logging for API, audit, and authenticator log types
- Dockerized services — each service has its own
Dockerfile;docker-compose.yamlfor local development - GitHub Actions CI/CD pipeline — automated build, Docker image push, and Kubernetes rollout on push to
main - React + TypeScript + Vite frontend served via Nginx in a container
- Kubernetes manifests in
/k8sdirectory — Deployments, Services, Ingress for each microservice
aws-eks-microservices-platform/
├── .github/
│ └── workflows/
│ └── deploy.yaml # GitHub Actions CI/CD pipeline
├── frontend/ # React + TypeScript + Vite app
├── k8s/ # Kubernetes manifests
│ ├── auth-deployment.yaml
│ ├── post-deployment.yaml
│ ├── comment-deployment.yaml
│ └── ingress.yaml
├── services/
│ ├── auth-service/ # Node.js + Express + Prisma
│ ├── post-service/
│ └── comment-service/
├── eks-cluster.yaml # eksctl cluster config
├── docker-compose.yaml # Local dev setup
├── init-db.sql # MySQL database initializer
├── architecture-diagram.html # Visual architecture diagram
└── README.md
- Node.js 20+
- Docker & Docker Compose
- AWS CLI configured
eksctlinstalled
# Clone the repo
git clone https://github.com/pavangm196-devops/aws-eks-microservices-platform.git
cd aws-eks-microservices-platform
# Start all services + MySQL + frontend
docker-compose up --buildServices available at:
- Frontend → http://localhost:3000
- Auth Service → http://localhost:3001
- Post Service → http://localhost:3002
- Comment Service → http://localhost:3003
# Start MySQL
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password mysql:8.0
# Initialize databases
mysql -h 127.0.0.1 -u root -ppassword < init-db.sql
# Start each service
cd services/auth-service && npm install && npx prisma db push && npx tsx src/index.ts
cd services/post-service && npm install && npx prisma db push && npx tsx src/index.ts
cd services/comment-service && npm install && npx prisma db push && npx tsx src/index.ts
# Start frontend
cd frontend && npm install && npm run dev# Create EKS cluster
eksctl create cluster -f eks-cluster.yaml
# Apply Kubernetes manifests
kubectl apply -f k8s/
# Verify pods are running
kubectl get pods -A| Skill | How it's shown |
|---|---|
| Kubernetes | EKS cluster setup, managed node groups, K8s manifests for all services |
| AWS | EKS, IAM addon policies, ALB Ingress, CloudWatch logging |
| CI/CD | GitHub Actions pipeline for build → push → deploy |
| Containerization | Dockerfiles per service, Docker Compose for local dev |
| Microservices | 3 isolated services, independent DB schemas, inter-service communication |
| Infrastructure as Code | eksctl YAML cluster config |
| Backend Engineering | Node.js + TypeScript + Prisma ORM |
Pavan G M — DevOps Engineer | AWS Certified Solutions Architect (SAA-C03) | CKA Certified