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 des images api + frontend (Kaniko), scan (Trivy), promote ECR par digest, puis write-back du tag dans Git â le dĂ©ploiement est GitOps pull-based (#72) : ArgoCD rĂ©concilie FastAPI et le frontend depuis Git, la CI ne touche pas au cluster.
- Terraform provisionne l'infra AWS, séparée en deux cycles de vie (persistent : ECR api + frontend ; éphémÚre : VPC + EKS + RDS).
- Exposition : Cloudflare DNS â NLB (#70) â Envoy Gateway partagĂ© â
api.(FastAPI),app.(SPA frontend, #110),grafana.etargocd.(#105). - 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).
- ObservabilitĂ© : mĂ©triques (Prometheus, #74), logs (Alloy â Loki, #75) et traces (OTLP â OTel Collector â Tempo, #107/#108), corrĂ©lĂ©es dans Grafana.
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 â GitOps ArgoCD pull-based (#72, write-back CI au lieu de
kubectl apply -k), docker build â Kaniko, ESO + IRSA pour les secrets (plus de lien direct pod â Secrets Manager), stack observabilitĂ© = Sprint 4 (en cours).
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