Plataforma de serving de modelo ML (Isolation Forest) via FastAPI, containerizada com Docker e deployada em Kubernetes. Portfólio de MLOps end-to-end.
| Camada | Tecnologia |
|---|---|
| API | FastAPI + uvicorn |
| Modelo | scikit-learn Isolation Forest |
| Containerização | Docker multi-stage |
| Dev | Docker Compose |
| Produção | Kubernetes (EKS) |
| CI/CD | GitHub Actions + AWS ECR |
| Observabilidade | Prometheus |
- Docker + Docker Compose
- Python 3.11
pip install -r app/requirements.txt
python scripts/train_model.pycd compose
docker-compose up --buildAcesse:
- API: http://localhost/health
- Prometheus: http://localhost:9090
curl -X POST http://localhost/predict \
-H "Content-Type: application/json" \
-d '{"features": [0.1, -0.2, 0.3, 0.0]}'Response:
{"score": -0.142, "is_anomaly": false}- Cluster EKS configurado
- ECR repository criado
- Secrets no GitHub:
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,EKS_CLUSTER_NAME,ECR_REGISTRY
Push para main dispara o pipeline completo: testes → build → push ECR → deploy EKS.
export ECR_REGISTRY=<sua-conta>.dkr.ecr.us-east-1.amazonaws.com
export IMAGE_TAG=latest
python scripts/train_model.py
docker build -f docker/Dockerfile -t $ECR_REGISTRY/mlops-serving:$IMAGE_TAG .
docker push $ECR_REGISTRY/mlops-serving:$IMAGE_TAG
sed -i "s|\${ECR_REGISTRY}|$ECR_REGISTRY|g" k8s/deployment.yaml
sed -i "s|\${IMAGE_TAG}|$IMAGE_TAG|g" k8s/deployment.yaml
kubectl apply -f k8s/python scripts/train_model.py
pytest tests/ -vVer ARCHITECTURE.md