Infrastructure as Code : principes, histoire et écosystème d'outils
Infrastructure as Code : principes, histoire et écosystème d

L'Infrastructure as Code (IaC) est l'une des pratiques fondamentales du DevOps moderneElle consiste à gérer et provisionner l'infrastructure informatique (serveurs, réseaux, bases de données, etc.) par le biais de fichiers de code versionnés, plutôt que par des processus manuels ou des configurations ponctuelles.
Origines et contexte historique
L'Infrastructure as Code émerge au début des années 2010, en réponse à la complexité croissante de la gestion d'infrastructure dans le cloudAvec l'essor d'Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform et d'autres providers, les organisations se retrouvent face à des environnements distribués, dynamiques et difficiles à gérer manuellement.
Les premiers outils comme Chef et Puppet se concentraient principalement sur la configuration des systèmes existants, mais ne couvraient pas vraiment le provisioning de l'infrastructure elle-mêmeC'est dans ce contexte qu'apparaissent des outils spécialisés :
- Terraform (2014), développé par HashiCorp, devient rapidement la référence du domaine
- CloudFormation (2011) d'AWS, spécifique à leur plateforme
- OpenTofu (2023), fork open-source de Terraform suite au changement de licence
Parallèlement, l'écosystème Kubernetes voit l'émergence d'outils comme Helm et Kustomize pour gérer les déploiements déclaratifs de configurations.
Infrastructure as Code vs Configuration Management : la distinction essentielle
Bien que complémentaires, ces deux disciplines répondent à des besoins différents :
Infrastructure as Code (IaC)
Ce que ça fait :
Provisionne et modélise l'infrastructure elle-même.
Exemples de tâches :
- Créer des machines virtuelles
- Déployer un cluster Kubernetes
- Créer un réseau VPC, une gateway, des sous-réseaux
- Définir des buckets S3, des load balancers, des bases de données
- Allouer des ressources cloud (compute, storage, networking)
Outils typiques :
Terraform, OpenTofu, Pulumi, Crossplane, AWS CDK, CDKTF, cdk8s…
Philosophie :
"L'infrastructure est une ressource à déclarer puis à faire émerger."
Configuration Management (CM)
Ce que ça fait :
Configure les systèmes et les applications qui vivent sur l'infrastructure.
Exemples de tâches :
- Installer des paquets
- Configurer Nginx, PostgreSQL, SSH…
- Gérer des utilisateurs
- Déployer des fichiers de configuration
- Appliquer des permissions
Outils typiques :
Ansible, Puppet, Chef, SaltStack, CFEngine…
Philosophie :
"L'état interne d'une machine doit être conforme à une définition déclarative."
Analogie simple
| Discipline | Métaphore | Question à laquelle elle répond |
|---|---|---|
| IaC | Construire une maison | De quoi est faite l'infrastructure ? |
| CM | Aménager et configurer la maison | Comment la machine doit-elle fonctionner ? |
En pratique, les deux sont utilisés ensemble :
Terraform crée une VM → Ansible configure les services → CI/CD déploie l'application.
Principes fondamentaux de l'IaC
Déclaratif vs Impératif
- Déclaratif : on décrit l'état souhaité de l'infrastructure, l'outil détermine comment l'atteindre
- Impératif : on décrit les étapes à suivre pour construire l'infrastructure
La plupart des outils modernes privilégient l'approche déclarative, plus sûre et plus maintenable.
Idempotence
L'application répétée du même code d'infrastructure doit produire le même résultat, sans créer de ressources dupliquées ni générer d'effets de bord.
Versionnement et traçabilité
L'infrastructure est versionnée dans Git, permettant :
- Traçabilité complète des changements
- Code review et validation avant application
- Rollback en cas de problème
- Documentation vivante de l'infrastructure
Reproductibilité
Un même code peut créer des environnements identiques (dev, staging, production) avec des variables différentes.
Types d'outils IaC
Outils de provisioning cloud
- Terraform / OpenTofu : multi-cloud, HCL (HashiCorp Configuration Language)
- Pulumi : multi-cloud, langages de programmation (Python, TypeScript, Go, etc.)
- Crossplane : Kubernetes-native, déclaratif via YAML
- AWS CDK : infrastructure définie en code (TypeScript, Python, etc.) pour AWS
- CDKTF : Terraform avec langages de programmation
- cdk8s : Kubernetes manifests via code
Outils de templating et de configuration
- Helm : package manager pour Kubernetes, charts réutilisables
- Kustomize : personnalisation de manifests Kubernetes sans templating
- Jsonnet : langage de configuration JSON avec templating
- Tanka : interface Jsonnet pour Kubernetes
- CUE : langage de configuration unifié, validation de schémas
- KCL : langage de configuration Kubernetes, validation et réutilisabilité
Outils d'orchestration et de composition
- Terragrunt : wrapper autour de Terraform pour la réutilisation de code
- Atmos : orchestrateur multi-cloud pour Terraform et Helm
Outils de build d'images
- Packer : création d'images de machines (AMI, Docker, etc.) reproductibles
- Vagrant : environnements de développement reproductibles
Outils de sécurité et de conformité
- checkov : analyse statique de sécurité pour Terraform, CloudFormation, Kubernetes
- kics : détection de problèmes de sécurité et de conformité dans l'IaC
- tfsec : scanner de sécurité spécialisé pour Terraform
- terrascan : scanner de sécurité et de conformité pour Terraform
- conftest : tests de politiques pour configurations (OPA/Rego)
Outils de test
- terratest : framework de tests pour Terraform en Go
Avantages de l'IaC
- Rapidité : provisionner des environnements entiers en minutes plutôt qu'en jours
- Cohérence : élimination des dérives entre environnements
- Réduction des erreurs : moins d'actions manuelles = moins d'erreurs humaines
- Documentation vivante : le code est la documentation
- Scalabilité : gestion de grandes infrastructures avec le même effort
- Audit et conformité : traçabilité complète des changements
- Coût optimisé : meilleure gestion des ressources cloud
Limites et défis
- Courbe d'apprentissage : maîtrise des outils, langages et concepts nécessaires
- Complexité à grande échelle : organisation du code, réutilisation, modules
- État et dérive : gestion de l'état, éviter les modifications manuelles
- Vendor lock-in potentiel : dépendance aux outils choisis
- Gestion des secrets : intégration sécurisée des credentials
- Coût d'erreur : une erreur peut affecter toute l'infrastructure
Bonnes pratiques
- Versionner tout : utiliser Git pour tout le code d'infrastructure
- Principle of least privilege : accès minimal nécessaire
- Test avant d'appliquer : utiliser plan/dry-run quand disponible
- Environnements séparés : dev, staging, production avec isolation
- Documentation : commenter les décisions architecturales importantes
- Code review : valider les changements d'infrastructure comme le code applicatif
- Backup de l'état : sécuriser et sauvegarder les fichiers d'état Terraform
- Modularité : réutiliser du code via modules, composants, libraries
L'écosystème aujourd'hui
L'Infrastructure as Code est devenue un standard de l'industrieLes outils continuent d'évoluer vers plus de simplicité, de sécurité et d'intégration avec les écosystèmes cloud-native (Kubernetes, GitOps, etc.)
L'émergence de OpenTofu illustre aussi la volonté de la communauté de préserver l'open-source face aux changements de licence de projets majeurs.
Références et ressources
- Martin Fowler, "Infrastructure as Code"
- Kief Morris, "Infrastructure as Code: Managing Servers in the Cloud"
- Yevgeniy Brikman, "Terraform: Up and Running"
📄️ Atlantis
Automation Terraform via Pull Requests avec collaboration workflow, approval, plan/apply automatisés et intégration Git native.
📄️ Atmos
Atmos est un orchestrateur multi-cloud pour Terraform et Helm, permettant de gérer des stacks complexes avec des workflows unifiés.
📄️ AWS CDK
AWS Cloud Development Kit (CDK) permet de définir l'infrastructure AWS en utilisant des langages de programmation familiers (TypeScript, Python, Java, etc.).
📄️ cdk8s
cdk8s est un framework permettant de définir des manifests Kubernetes en utilisant des langages de programmation familiers.
📄️ CDKTF
CDK for Terraform (CDKTF) permet d'utiliser des langages de programmation familiers pour définir l'infrastructure Terraform.
📄️ checkov
checkov est un scanner d'analyse statique de sécurité pour l'Infrastructure as Code (Terraform, CloudFormation, Kubernetes, etc.).
📄️ conftest
conftest est un outil pour tester des fichiers de configuration avec des politiques définies en Rego (Open Policy Agent).
📄️ Crossplane
Crossplane est une plateforme Kubernetes-native d'Infrastructure as Code, permettant de provisionner et gérer l'infrastructure cloud via des ressources Kubernetes.
📄️ CUE
CUE est un langage de configuration unifié avec validation de types, idéal pour définir, valider et gérer des configurations complexes.
📄️ Helm
Helm est le gestionnaire de paquets pour Kubernetes, permettant de définir, installer et gérer des applications Kubernetes via des charts.
📄️ Jsonnet
Jsonnet est un langage de configuration basé sur JSON avec support de variables, fonctions et imports pour éviter la duplication.
📄️ KCL
KCL est un langage de configuration Kubernetes avec validation, réutilisabilité et gestion de la complexité des manifests.
📄️ kics
kics est un scanner de sécurité open-source pour détecter les problèmes de sécurité, de conformité et de mauvaise configuration dans l'IaC.
📄️ Kustomize
Kustomize est un outil natif Kubernetes pour personnaliser des manifests YAML sans templating, via composition et patches.
📄️ OpenTofu
OpenTofu est un fork open-source de Terraform, créé pour maintenir une licence libre après le changement de licence de Terraform vers BSL.
📄️ Packer
Packer est un outil pour créer des images de machines identiques pour plusieurs plateformes à partir d'une unique configuration source.
📄️ Pike
Outil pour déterminer les permissions IAM minimales requises pour déployer du code Infrastructure as Code (Terraform/OpenTofu).
📄️ Pulumi
Pulumi est une plateforme d'Infrastructure as Code permettant de définir l'infrastructure avec de vrais langages de programmation (TypeScript, Python, Go, etc.).
📄️ Tanka
Tanka est une interface Jsonnet pour Kubernetes, permettant de gérer des applications Kubernetes de manière déclarative et réutilisable.
📄️ Terragrunt
Terragrunt est un wrapper autour de Terraform qui facilite la réutilisation de code, la gestion multi-environnements et la configuration DRY.
📄️ terrascan
terrascan est un scanner de sécurité et de conformité pour l'Infrastructure as Code, supportant Terraform et d'autres formats IaC.
📄️ terratest
terratest est un framework de tests Go pour tester l'infrastructure Terraform de manière automatisée et reproductible.
📄️ Terraform OSS
Terraform est un outil d'Infrastructure as Code déclaratif, permettant de provisionner et gérer l'infrastructure multi-cloud via des fichiers HCL.
📄️ TFLint
Linter Terraform pluggable pour détecter les erreurs possibles, alerter sur les syntaxes dépréciées et faire appliquer les bonnes pratiques.
📄️ tfsec
tfsec est un scanner de sécurité spécialisé pour Terraform, analysant les configurations pour détecter les problèmes de sécurité.
📄️ Vagrant
Vagrant est un outil pour créer et gérer des environnements de machines virtuelles reproductibles pour le développement.
📄️ yamlfmt
Outil de formatage YAML en CLI/lib développé par Google, très utile pour standardiser l'IaC (Helm, manifests Kubernetes, pipelines).
📄️ awscurl
Outil curl pour AWS avec signature SigV4, pratique pour debug API AWS, tests, et scripts ops nécessitant des appels API AWS authentifiés.
📄️ cloudlens
CLI similaire à k9s pour AWS et GCP, offrant une interface TUI pour gérer et monitorer les ressources cloud depuis le terminal.
📄️ taws
Terminal UI pour AWS offrant une interface TUI pour naviguer, observer et gérer les ressources AWS depuis le terminal, similaire à k9s pour Kubernetes.
📄️ Terraschema
Outil développé par Hewlett Packard pour générer du JSON Schema à partir de configurations Terraform, utile pour validation et quality gates.
📄️ Formae
Plateforme IaC / IaC Platform développée par Platform Engineering Labs, à étudier si vous construisez une couche self-service platform pour l'IaC.
📄️ AWS FinOps Dashboard
Dashboard terminal FinOps AWS développé par ravikiranvm, permettant de visualiser et analyser les coûts AWS depuis le terminal.