Automatisation complète d'une infrastructure AWS pour le client Wellmum via Terraform Cloud et GitHub Actions. Ce repository partage l'expérience et l'implémentation d'un projet d'infrastructure cloud de niveau production.
- Contexte du projet
- Architecture
- Structure du repository
- Prérequis
- Configuration initiale
- Déploiement de l'infrastructure
- Workflows CI/CD
- Mise à jour de l'infrastructure
- Applications
- Organisation de l'infrastructure
- Bonnes pratiques
Wellmum avait besoin d'une infrastructure AWS de niveau production avec :
- ✅ Haute disponibilité : multi-AZ, load balancing, auto-scaling
- 🔒 Sécurisée : IAM, Security Groups, gestion des secrets
- 📈 Évolutive : architecture modulaire et scalable
- 🤖 Entièrement codifiée : Infrastructure as Code avec Terraform
- 🚀 Déployée en continu : CI/CD via GitHub Actions
Concevoir, valider et implémenter une architecture AWS complète, puis automatiser son provisioning et le déploiement des applications via des pipelines CI/CD robustes.
Les applications présentes dans ce repository (wellmum-ai, wellmum-api, wellmum-landing) sont des clones simplifiés basés sur les mêmes technologies que les applications originales du client. Le code source réel n'est pas inclus pour des raisons de confidentialité.
Ces clones permettent néanmoins de :
- Démontrer l'architecture complète
- Tester les pipelines de déploiement
- Illustrer l'organisation d'un projet multi-services réel
Cette expérience est partagée via l'initiative DevCloud Challenge à des fins pédagogiques. L'implémentation est abordée de façon plus approfondie dans le cours Projets Cloud, DevOps, DevSecOps, Data & AI — Indispensables pour Consultants Informatiques sur EAZYTraining.
L'application Wellmum est composée de trois services principaux :
L'infrastructure AWS est organisée en plusieurs couches :
Le processus de déploiement automatisé suit une séquence précise :
wellmum/
│
├── .github/
│ └── workflows/ # Pipelines CI/CD GitHub Actions
│ ├── rex-deploy-terraform.yml # Déploiement infrastructure
│ ├── rex-deploy-api.yml # Déploiement API
│ ├── rex-deploy-*.yml # Déploiement services IA
│ └── rex-destroy-*.yml # Destruction environnements
│
├── wellmum-infra/ # 🏗️ Infrastructure as Code (Terraform)
│ ├── wellmum-network/ # VPC, Subnets, NAT, Internet Gateway
│ ├── wellmum-security/ # IAM, Roles, Secrets Manager, KMS
│ ├── wellmum-stockage/ # EFS, S3, volumes persistants
│ ├── wellmum-cluster/ # ECS Cluster, ECR
│ ├── wellmum-landing/ # Infrastructure Amplify (Frontend)
│ │ ├── dev/ # Environnement développement
│ │ ├── prod/ # Environnement production
│ │ └── modules/ # Modules réutilisables
│ ├── wellmum-api/ # Infrastructure ECS + ALB + RDS (API)
│ │ ├── dev/
│ │ ├── prod/
│ │ └── modules/
│ └── wellmum-ai/ # Infrastructure ECS Services IA
│ ├── dev/
│ ├── prod/
│ └── modules/
│
├── wellmum-api/ # 🔧 Application API (NestJS clone)
│ ├── src/
│ ├── Dockerfile
│ └── docker-compose.yml
│
├── wellmum-ai/ # 🤖 Microservices IA (FastAPI clones)
│ ├── chat/ # Service chat IA
│ ├── food_detector/ # Détection aliments + calories
│ ├── nutrition/ # Plans nutritionnels personnalisés
│ ├── routines/ # Routines d'exercices
│ └── social/ # Modération sociale IA
│
└── wellmum-landing/ # 🌐 Application Frontend (Next.js clone)
├── app/
├── components/
└── next.config.ts
Avant de commencer, assurez-vous d'avoir :
- ✅ Un compte AWS avec les permissions nécessaires
- ✅ Un compte Terraform Cloud configuré
- ✅ Un compte GitHub avec accès au repository
- ✅ Terraform CLI version ~1.9 installé localement (optionnel)
- ✅ Git installé
Pour bien comprendre l'ensemble des implémentations réalisées dans ce projet, les ressources suivantes sont recommandées :
Cours & Tutos :
- 🎓 Devenez AWS Certified Associate Architect et SysOps
- 🏗️ Terraform : les bases
- 📜 Terraform : Passez la certification Hashicorp Terraform Associate
- 🤖 Découvrir GitHub Copilot, de l'installation à la productivité globale
Bootcamp :
-
Créer une organisation dans Terraform Cloud :
- Nom suggéré :
REX-WELLMUM-Services-Infrastructure
- Nom suggéré :
-
Créer les workspaces suivants :
wellmum-network wellmum-security wellmum-stockage wellmum-cluster wellmum-landing-dev wellmum-landing-prod wellmum-api-dev wellmum-api-prod wellmum-ai-dev wellmum-ai-prod -
Générer un API Token :
- Aller dans User Settings → Tokens
- Créer un nouveau token et le copier
Dans votre repository GitHub, aller dans Settings → Secrets and variables → Actions et ajouter :
| Secret | Description | Exemple |
|---|---|---|
TF_API_TOKEN |
Token API Terraform Cloud | xxxxxxxxxxxxx.atlasv1.xxxxx |
AWS_ACCESS_KEY_ID |
Clé d'accès AWS (pour les workflows de déploiement applicatif) | AKIAXXXXXXXXXXXXXXXX |
AWS_SECRET_ACCESS_KEY |
Clé secrète AWS | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
Pour chaque workspace, configurez les variables suivantes :
Variables AWS (pour tous les workspaces) :
AWS_ACCESS_KEY_ID(Environment variable, sensitive)AWS_SECRET_ACCESS_KEY(Environment variable, sensitive)AWS_DEFAULT_REGION(Environment variable) =us-east-1(ou votre région)
Variables spécifiques (selon le workspace) :
- Variables de configuration réseau (CIDR, etc.)
- Variables de sécurité (noms de secrets, etc.)
- Variables d'application (tailles d'instance, etc.)
Le déploiement initial de l'infrastructure se fait automatiquement via GitHub Actions en suivant cet ordre :
-
Déclenchement du workflow :
# Option 1 : Push sur la branche main (déploiement production) git push origin main # Option 2 : Push sur la branche test (déploiement dev avec auto-approve) git push origin test # Option 3 : Déclenchement manuel # Aller dans Actions → Terraform Infrastructure Deploy → Run workflow
-
Séquence de déploiement automatique :
Le workflow .github/workflows/rex-deploy-terraform.yml déploie l'infrastructure dans cet ordre :
1️⃣ Network (VPC, Subnets, NAT Gateway, Internet Gateway) ↓ 2️⃣ Security (IAM Roles, Security Groups, Secrets Manager) ↓ 3️⃣ Stockage (EFS, S3 Buckets) ↓ 4️⃣ Landing (AWS Amplify pour le frontend) ↓ 5️⃣ Cluster (ECS Cluster + ECR Repositories) ↓ 6️⃣ AI Services (ECS Services pour les microservices IA) ↓ 7️⃣ API (ECS Service + ALB + RDS pour l'API) -
Environnements :
- Branche
test→ Déploiement automatique en environnement dev - Branche
main→ Déploiement en environnement prod (nécessite validation manuelle)
- Branche
Fichier : .github/workflows/rex-deploy-terraform.yml
Déclencheurs :
- Push sur
mainoutestavec modifications danswellmum-infra/** - Pull Request vers
mainoutest - Déclenchement manuel (
workflow_dispatch)
Fonctionnalités :
- ✅ Détection intelligente des changements (déploie uniquement les modules modifiés)
- ✅ Déploiement séquentiel respectant les dépendances
- ✅ Auto-approve sur branche
test(environnement dev) - ✅ Validation manuelle sur branche
main(environnement prod) - ✅ Gestion d'environnements GitHub (production/testment)
Chaque service dispose de son propre workflow pour le build et le déploiement des images Docker :
rex-deploy-api.yml: Build et push de l'image API vers ECRrex-deploy-chat.yml: Service de chat IArex-deploy-food-detector.yml: Service de détection alimentairerex-deploy-nutrition.yml: Service de nutritionrex-deploy-routines.yml: Service de routinesrex-deploy-social.yml: Service social
Pour supprimer les environnements :
rex-destroy-dev.yml: Destruction complète de l'environnement devrex-destroy-prod.yml: Destruction complète de l'environnement prodrex-destroy-shared.yml: Destruction de l'infrastructure partagée (network, security, etc.)
-
Modifier le code Terraform dans le dossier concerné :
# Exemple : modification du réseau cd wellmum-infra/wellmum-network # Éditer les fichiers .tf
-
Commit et push :
git add . git commit -m "feat: update network configuration" git push origin test # Pour tester en dev d'abord
-
Le workflow détecte automatiquement les changements et ne déploie que les modules modifiés.
-
Après validation en dev, merger vers
mainpour déployer en production.
Consultez wellmum-infra/structure-dossier.md pour comprendre en détail :
- ✅ Séparation Core/Application : Infrastructure de base vs infrastructure applicative
- ✅ Réutilisabilité : Les modules Core sont partagés entre les applications
- ✅ Maintenance facilitée : Modifications ciblées sans impact global
- ✅ Scalabilité : Ajout facile de nouveaux services
- ✅ Environnements multiples : Dev et Prod isolés avec la même base de code
Technologie : NestJS (Node.js/TypeScript)
Port : 3000
Services : API REST + Swagger UI
cd wellmum-api
docker-compose up --buildEndpoints :
- Health Check :
GET /api/healthcheck - Documentation :
/api/docs
Technologie : FastAPI (Python 3.11)
Services :
| Service | Port | Description |
|---|---|---|
| Chat | 8002 | Interactions chat avec IA |
| Food Detector | 8003 | Détection d'aliments et estimation calorique |
| Nutrition | 8004 | Plans nutritionnels personnalisés |
| Routines | 8005 | Génération de routines d'exercices |
| Social | 8006 | Modération des interactions sociales |
Chaque service expose un endpoint /healthz pour le health check.
cd wellmum-ai/chat
docker-compose up --buildTechnologie : Next.js (React/TypeScript)
Port : 3000
cd wellmum-landing
npm install
npm run devCes composants sont indépendants des applications et constituent la fondation :
| Module | Responsabilité |
|---|---|
| wellmum-network | VPC, Subnets (publics/privés), NAT Gateway, Internet Gateway, Routes, ACL |
| wellmum-security | Rôles IAM, Politiques, Security Groups, Secrets Manager, KMS |
| wellmum-stockage | EFS (stockage partagé), S3 Buckets, configurations de volumes |
| wellmum-cluster | ECS Cluster, ECR Repositories, configuration du cluster |
Ces modules consomment le Core et ajoutent l'infrastructure nécessaire à chaque application :
| Module | Structure | Responsabilité |
|---|---|---|
| wellmum-landing | dev/, prod/, modules/ |
AWS Amplify, configuration frontend |
| wellmum-api | dev/, prod/, modules/ |
ECS Services, ALB, Target Groups, RDS (PostgreSQL) |
| wellmum-ai | dev/, prod/, modules/ |
ECS Services pour les 5 microservices IA |
Core Infrastructure (1-4)
↓
Application Infrastructure (5-7)
↓
Application Deployment (Docker Images)
- ✅ Code modulaire : Réutilisation maximale via modules Terraform
- ✅ État distant : Terraform Cloud pour la gestion de l'état
- ✅ Workspaces : Isolation dev/prod
- ✅ Variables : Configuration externalisée et sécurisée
- ✅ Déploiements incrémentaux : Détection des changements pour optimiser les builds
- ✅ Validation manuelle : Protection de la production
- ✅ Auto-approve : Accélération en développement
- ✅ Rollback : Workflows de destruction pour nettoyer les environnements
- ✅ Secrets managés : AWS Secrets Manager + GitHub Secrets
- ✅ IAM Roles : Moindre privilège
- ✅ Security Groups : Segmentation réseau stricte
- ✅ Health Checks : Tous les services exposent des endpoints de santé
- ✅ Logs : CloudWatch Logs pour le monitoring
- ✅ Métriques : CloudWatch Metrics + Auto Scaling
En explorant ce repository, vous maîtriserez :
- Conception d'architecture cloud adaptée aux besoins métier
- Infrastructure as Code avec Terraform et bonnes pratiques
- Terraform Cloud : workspaces, état distant, collaboration
- CI/CD avec GitHub Actions pour infrastructure et applications
- Organisation projet : séparation Core/Application, modules réutilisables
- Sécurité AWS : IAM, Security Groups, Secrets Management
- Conteneurisation : Docker, ECS, ECR
- Multi-environnements : Gestion Dev/Prod avec le même code
Regardez la playlist complète présentant le déploiement et l'architecture :
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
Projet réel réalisé pour le client Wellmum. Cette expérience est partagée via l'initiative DevCloud Challenge à des fins éducatives et de partage de connaissances.
📚 L'implémentation de ce projet est davantage détaillée dans le cadre du cours EAZYTraining : Projets Cloud, DevOps, DevSecOps, Data & AI — Indispensables pour Consultants Informatiques


.png)
