Architecture
Vue d'ensemble du projet : une API FastAPI déployée en conditions production-grade sur AWS EKS, de la CI/CD au runtime.
Vue d'ensemble (diagram as code)

- GitLab CI/CD : build de l'image (Kaniko), scan (Trivy), déploiement (Kustomize).
- Terraform provisionne l'infra AWS, séparée en deux cycles de vie (persistent : ECR ; éphémÚre : VPC + EKS + RDS).
- Exposition : Cloudflare DNS â ELB â Envoy Gateway â Service â pods FastAPI.
- Secrets : External Secrets Operator synchronise AWS Secrets Manager vers un Secret Kubernetes, authentifié par IRSA (aucun secret en clair).
- TLS : cert-manager émet le certificat via Let's Encrypt (challenge DNS-01 Cloudflare).
Ce schéma est généré depuis diagrams/architecture.py
(voir la section régénération en bas de page).
Les schĂ©mas dĂ©taillĂ©s ci-dessous sont Ă rafraĂźchir. Ils datent de la planification (Sprint 0-1) et ne reflĂštent plus l'Ă©tat actuel. Ăcarts connus : ALB â Envoy Gateway (Gateway API, #34/#28), Route53 â Cloudflare DNS, GitLab Agent â runner self-hosted +
kubectl apply -k, docker build â Kaniko, ESO + IRSA pour les secrets (plus de lien direct pod â Secrets Manager), stack observabilitĂ© = Sprint 4 (non livrĂ©e).
CI/CD Pipeline Detail
sequenceDiagram
participant Dev as đšâđ» Developer
participant GL as GitLab
participant CI as GitLab CI/CD
participant ECR as AWS ECR
participant EKS as AWS EKS
Dev->>GL: git push / Merge Request
GL->>CI: trigger pipeline
rect rgb(220, 240, 220)
Note over CI: Stage: test â
Sprint 0
CI->>CI: pytest (37 tests)
CI->>CI: coverage report (XML)
CI->>GL: coverage badge
end
rect rgb(255, 243, 205)
Note over CI: Stage: security đ Sprint 1
CI->>CI: SAST (GitLab)
CI->>CI: Trivy container scan
CI->>CI: Secret Detection
end
rect rgb(220, 235, 255)
Note over CI: Stage: build đ Sprint 1
CI->>CI: docker build
CI->>ECR: docker push
end
rect rgb(240, 220, 255)
Note over CI: Stage: deploy âł Sprint 3
CI->>EKS: GitLab Agent sync
EKS->>ECR: pull image
EKS->>EKS: rolling update
end
Local Development Stack
graph LR
subgraph HOST["Host Machine"]
DEV["đšâđ» Developer\nbrowser / curl"]
end
subgraph COMPOSE["Docker Compose (docker-compose-dev.yaml)"]
API["fastapi-app-dev\nuvicorn :8080\n+ alembic migrate"]
DB["postgres-db-dev\nPostgreSQL 16 :5432"]
PGA["pgadmin-dev\npgAdmin4 :8081"]
end
DEV -->|":8080"| API
DEV -->|":8081"| PGA
API -->|"SQLAlchemy"| DB
PGA --> DB
API -->|"healthcheck\ncurl /"| API
DB -->|"healthcheck\npg_isready"| DB
Régénérer le schéma d'ensemble
Le schéma d'ensemble est généré en diagram as code (lib
mingrammer/diagrams). AprÚs une évolution de
l'architecture, mettre à jour diagrams/architecture.py et régénérer dans la
mĂȘme MR :
python -m venv ~/.venvs/diagrams && source ~/.venvs/diagrams/bin/activate
pip install -r docs/diagrams/requirements.txt
sudo apt install -y graphviz
cd docs/diagrams && python architecture.py # régénÚre devsecops-eks.png ici