3.2 KiB
3.2 KiB
ADR-001 — Choix de l'outil Infrastructure-as-Code : Terraform vs Pulumi
Date : 2026-02-19 Statut : ACCEPTÉ Décideurs : CTO, DevOps Sprint : Sprint 1 (Spike de 4h)
Contexte
Veylant IA requiert un outil IaC pour provisionner et gérer :
- Cluster EKS AWS (eu-west-3), 3 nodes
- VPC, subnets, security groups, NAT gateway
- Services managés futurs (RDS, ElastiCache)
- Ingress Traefik, certificats TLS
Le spike Sprint 1 avait pour objectif d'évaluer Terraform et Pulumi afin de choisir l'outil avant que l'infra ne soit créée.
Options évaluées
Option A — Terraform / OpenTofu
Pour :
- Module
terraform-aws-eksv20.x (LTS) — EKS provisionné en <100 lignes HCL, testé par des milliers d'équipes - HCL : déclaratif, diff lisible en PR, facile à code-reviewer
- Plan d'exécution (
terraform plan) explicite et déterministe — pas de side-effects dans le code IaC - Gestion d'état mature : S3 + DynamoDB lock (zéro lock cassé en prod)
- Documentation AWS exhaustive, Stack Overflow dense
- OpenTofu (fork open-source BSL → MPL) : pas de vendor lock-in HashiCorp
Contre :
- HCL limité pour la logique complexe (boucles
for_eachpeuvent être verbeux) - Pas de typage fort — erreurs découvertes à l'apply, pas à la compilation
Option B — Pulumi (TypeScript)
Pour :
- TypeScript natif → réutilisable avec le reste du projet
- Logique complexe (conditions, boucles, fonctions réutilisables) en code natif
- Typage fort avec vérification à la compilation
Contre :
- Runtime intermédiaire (Pulumi engine) → debugging moins transparent qu'un plan HCL
- Communauté plus petite, moins de modules AWS prêts à l'emploi pour EKS
- Stack d'état hébergée par Pulumi Cloud par défaut (alternative self-hosted plus complexe)
- Courbe d'apprentissage pour le DevOps habitué à Terraform
Décision
Terraform / OpenTofu est retenu.
Raisons
- Risque réduit story E1-04 : Le module
terraform-aws-eksest stable et documenté → réduit le risque principal de la story (EKS peut prendre 3+ jours sans outil mature). - Expérience équipe : Le profil DevOps a de l'expérience Terraform existante — pas de courbe d'apprentissage en Sprint 1.
- Lisibilité des PR : Le
terraform planen HCL est lisible par tous (CTO, Backend) lors des reviews de changements infra. - État sécurisé : S3 + DynamoDB lock est éprouvé et simple à opérer.
- OpenTofu : Le fork open-source est désormais stable (v1.7+) et évite le risque de changement de licence HashiCorp.
Conséquences
- Créer un bucket S3
veylant-terraform-state-eu-west-3+ table DynamoDBveylant-terraform-lockavant le premierterraform apply - Structure :
deploy/terraform/avec modules séparés (vpc/,eks/,monitoring/) - Utiliser
terraform-aws-eksv20.x - Pinning des versions providers dans
versions.tf(pas de~>ouvert) - OpenTofu CLI installé via Homebrew :
brew install opentofu
Révision
Cette décision sera réexaminée si :
- La logique IaC devient significativement plus complexe (>500 lignes par module)
- L'équipe passe à TypeScript pour l'ensemble du stack (SDK natif V2)