Skip to content

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)

Architecture DevSecOps EKS

  • 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