Ceci est une ancienne révision du document !
Introduction à l’Infrastructure as Code (IaC)
Objectifs
- Comprendre les limites des approches traditionnelles
- Identifier les problématiques résolues par l’IaC
- Découvrir les principes fondamentaux de l’IaC
- Distinguer les rôles de Terraform et Ansible
1. Problèmes sans Infrastructure as Code
1.1 Gestion manuelle des infrastructures
Dans une approche classique :
- Création manuelle des machines (console cloud)
- Configuration à la main (SSH, scripts)
- Déploiements non standardisés
Problèmes :
- Erreurs humaines fréquentes
- Temps de déploiement long
- Difficulté à reproduire un environnement
1.2 Dérive de configuration (Configuration Drift)
Définition :
Un système évolue au fil du temps et ne correspond plus à sa configuration initiale.
Exemple :
- Un serveur en production a été modifié manuellement - L’environnement de test n’est plus identique - Bugs impossibles à reproduire
1.3 Non reproductibilité
Sans automatisation :
- Impossible de recréer rapidement un environnement - Dépendance à des connaissances implicites - Documentation souvent obsolète
1.4 Passage à l’échelle difficile
Exemple :
- Créer 1 serveur → faisable à la main - Créer 50 serveurs → ingérable
Problèmes :
- Temps - cohérence - erreurs cumulées
1.5 Manque de traçabilité
Questions difficiles :
- Qui a modifié quoi ? - Quand ? - Pourquoi ?
1.6 Transition
L’infrastructure devient :
- trop complexe - trop dynamique - trop critique
⇒ Besoin d’automatisation et de standardisation
2. Concepts de l’Infrastructure as Code
2.1 Définition
Infrastructure as Code :
Décrire l’infrastructure sous forme de code afin de pouvoir :
- versionner - automatiser - reproduire
2.2 Principes fondamentaux
Déclaratif vs procédural
- Déclaratif : décrire l’état cible - Procédural : décrire les étapes
Idempotence
Appliquer plusieurs fois une configuration produit le même résultat
Versioning
- Code stocké dans Git - Historique des modifications - rollback possible
Automatisation
- Déploiement rapide - Réduction des erreurs humaines
Reproductibilité
- Même code = même infrastructure
2.3 Cycle de vie
- Écriture du code - Planification (diff) - Application - Mise à jour - Destruction
3. Deux approches complémentaires
3.1 Vision globale
Deux grandes catégories d’outils :
- Provisioning d’infrastructure - Configuration des systèmes
3.2 Terraform
Rôle :
- Provisionner l’infrastructure
Exemples :
- VM (EC2) - Réseau (VPC, subnets) - Load balancer - Base de données
Caractéristiques :
- Approche déclarative - Gestion d’un état (state) - Interaction via API cloud
3.3 Ansible
Rôle :
- Configurer les systèmes - Déployer des applications
Exemples :
- Installer NGINX - Configurer un service - Déployer une application
Caractéristiques :
- Approche orientée tâches - Exécution séquentielle - Idempotence
3.4 Comparaison
Terraform :
- Déclaratif - Orienté infrastructure - Gère un état global
Ansible :
- Orienté tâches - Configuration logicielle - Pas de state central
3.5 Complémentarité
Dans un workflow réel :
- Terraform crée l’infrastructure - Ansible configure les serveurs
4. Conclusion
L’Infrastructure as Code permet :
- d’industrialiser les déploiements - de fiabiliser les environnements - de gagner en rapidité et en reproductibilité
Terraform et Ansible ne sont pas concurrents mais complémentaires.
5. Question de réflexion
Pourquoi est-il risqué de modifier une infrastructure manuellement en production ?