Comparaison des solutions IaC¶
Cette page alimente un ADR (Architecture Decision Record) pour le choix d'un outil d'Infrastructure as Code. Les solutions evaluees couvrent des approches différentes du provisioning d'infrastructure.
Panorama des approches¶
Le marche IaC se divise en trois familles d'approches :
| Approche | Outils | Description |
|---|---|---|
| DSL declaratif | OpenTofu, Terraform | Langage dedie (HCL) pour decrire l'état desire de l'infra |
| Général-purpose | Pulumi, AWS CDK | Langages existants (Python, TypeScript, Go) pour définir l'infra |
| Kubernetes-native | Crossplane | CRDs Kubernetes pour provisionner des ressources cloud |
| Configuration manager | Ansible (IaC mode) | Playbooks YAML pour provisionner et configurer |
Grille de comparaison¶
| Critère | OpenTofu | Pulumi | Crossplane | AWS CDK | Ansible (IaC) |
|---|---|---|---|---|---|
| Licence | MPL 2.0 (open source) | Apache 2.0 (open core) | Apache 2.0 | Apache 2.0 | GPL 3.0 |
| Langage | HCL (declaratif) | Python, TS, Go, C#, Java | YAML (CRDs Kubernetes) | TypeScript, Python, Java | YAML (playbooks) |
| Paradigme | Declaratif | Imperatif + declaratif | Declaratif (reconciliation) | Imperatif (synthese) | Imperatif (idempotent) |
| Gestion du state | Backend remote (S3, GCS, PG) | Service Pulumi Cloud ou self-hosted | etcd Kubernetes | CloudFormation stack | Pas de state |
| Ecosysteme de providers | 4 000+ (Terraform-compatible) | 150+ natifs + Terraform bridge | 200+ (CRDs) | AWS uniquement | 100+ collections Galaxy |
| Integration Kubernetes | Provider Kubernetes/Helm | Provider natif | Natif (CRDs + reconciliation) | Via CloudFormation | Modules k8s, helm |
| Courbe d'apprentissage | Moyenne (HCL a apprendre) | Faible si langage connu | Elevee (CRDs + composition) | Faible si AWS connu | Faible (YAML) |
| Multi-cloud | Natif (providers multiples) | Natif | Natif (CRDs multi-cloud) | Non (AWS seulement) | Natif (collections) |
| Communauté | Linux Foundation, en croissance | Pulumi Corp, active | CNCF Incubating | AWS, active | Red Hat, tres large |
| Maturité | 2+ ans (fork), 10+ ans (HCL) | 7+ ans | 5+ ans | 6+ ans | 12+ ans |
Analyse détaillée¶
OpenTofu — DSL declaratif open source¶
Forces :
- Fork open source de Terraform, maintenu par la Linux Foundation
- Compatible avec l'ecosysteme Terraform existant (providers, modules, registry)
- HCL est un langage declaratif conçu pour l'IaC : lisible et predictible
- 4 000+ providers couvrant tous les clouds et services majeurs
- State management mature avec locking, encryption et backends multiples
- Communauté en forte croissance depuis le changement de licence de Terraform
Faiblesses :
- HCL est un langage a apprendre (pas un langage général-purpose)
- Logique conditionnelle limitee par rapport à un langage de programmation
- Drift detection uniquement a l'execution de
tofu plan
Cas d'usage : provisioning multi-cloud, équipes ops, ecosysteme Terraform existant.
Pulumi — Général-purpose languages¶
Forces :
- Utilisation de langages connus (Python, TypeScript, Go, C#, Java)
- Logique de programmation complète (boucles, conditions, fonctions)
- Tests unitaires et d'integration avec les frameworks habituels
- Terraform bridge pour réutiliser les providers Terraform
- Crossguard pour les policies as code
Faiblesses :
- State par defaut dans Pulumi Cloud (SaaS, dependance éditeur)
- Self-hosted backend disponible mais moins integre
- Ecosysteme natif plus restreint (150+ providers vs 4 000+)
- Complexité accrue : un langage général-purpose peut produire du code IaC complexe
- Verbeux pour des cas simples qui sont concis en HCL
Cas d'usage : équipes de développeurs preferant leurs langages, IaC complexe avec logique metier.
Crossplane — Kubernetes-native IaC¶
Forces :
- Fonctionne comme un opérateur Kubernetes natif (CRDs + reconciliation continue)
- Drift detection en temps reel (reconciliation loop)
- Compositions pour abstraire et réutiliser des patterns d'infra
- Modèle GitOps natif (les CRDs sont des manifestes YAML)
- CNCF Incubating, adoption croissante
Faiblesses :
- Necessite un cluster Kubernetes comme plan de contrôle
- Courbe d'apprentissage elevee (CRDs, compositions, XRDs)
- Debugging complexe (chaîne de reconciliation multi-niveaux)
- Ecosysteme de providers encore en maturation
- Surpoids si l'équipe ne gère pas déjà Kubernetes
Cas d'usage : organisations Kubernetes-first, plateformes internes, IaC GitOps.
AWS CDK — IaC spécifique AWS¶
Forces :
- Langages général-purpose (TypeScript, Python, Java, Go, C#)
- Constructs de haut niveau (L2/L3) qui encapsulent les bonnes pratiques AWS
- Integration native avec CloudFormation et les services AWS
- CDK for Terraform (cdktf) pour aller au-delà d'AWS
Faiblesses :
- Limite a AWS (CloudFormation en backend)
- State gère par CloudFormation (limites de taille, rollbacks complexes)
- Pas de multi-cloud natif
- cdktf est une surcouche, pas un remplacement
Cas d'usage : équipes 100% AWS, développeurs TypeScript/Python souhaitant rester sur AWS.
Ansible — IaC mode¶
Forces :
- Pas de state a gérer (idempotence via les modules)
- Syntaxe YAML familiere, faible courbe d'apprentissage
- Collections Galaxy pour tous les clouds (amazon.aws, google.cloud, azure.azcollection)
- Combine provisioning et configuration dans un seul outil
- Tres large communauté, 12+ ans de maturité
Faiblesses :
- Pas de state : pas de
planpour previsualiser les changements - Drift detection inexistante (pas de reconciliation)
- Lent pour le provisioning d'infrastructure complexe (execution séquentielle)
- Les modules cloud sont moins riches que les providers Terraform/OpenTofu
- Approche imperative : l'ordre des tâches compte
Cas d'usage : équipes existantes Ansible, infra simple, combinaison provisioning + configuration.
Decision recommandee¶
Choix principal : OpenTofu¶
Decision : adopter OpenTofu comme outil principal d'Infrastructure as Code.
Justification :
| Critère | Raison du choix |
|---|---|
| Licence open source (MPL 2.0) | Pas de risque de changement de licence (leçon Terraform/BSL) |
| Ecosysteme Terraform-compatible | 4 000+ providers, modules existants réutilisables |
| Multi-cloud natif | GCP, AWS, Azure, OVH, OpenStack avec les mêmes workflows |
| HCL declaratif | Predictible, auditable, adapte aux revues de code par des ops et devs |
| State management mature | Backend remote, locking, encryption, import |
| Linux Foundation | Gouvernance ouverte, pérennité assuree |
Alternatives valides¶
Pulumi si :
- L'équipe est composee de développeurs qui préfèrent écrire en Python/TypeScript
- L'IaC necessite une logique metier complexe (boucles dynamiques, appels API)
- Les tests unitaires de l'infra sont une priorité
Crossplane si :
- L'organisation est Kubernetes-first avec un cluster dedie au plan de contrôle
- La reconciliation continue (drift detection temps reel) est un besoin critique
- L'équipe plateforme souhaite exposer des abstractions d'infra en self-service
Combinaison possible
OpenTofu et Ansible se completent naturellement : OpenTofu provisionne l'infrastructure, Ansible configure les machines. Voir le chapitre Integration pour le pipeline combine.
Format ADR
Cette comparaison suit le format ADR décrit dans la rubrique Architecture Decision Records. Conservez ce document a jour lorsque de nouvelles solutions emergent ou que les critères evoluent.