Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| eadl:bloc4:fm2:intro [2026/04/25 02:04] – jcheron | eadl:bloc4:fm2:intro [2026/04/30 01:58] (Version actuelle) – jcheron | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ====== Introduction à l’Infrastructure as Code (IaC) ====== | + | ====== Introduction à l'Infrastructure as Code (IaC) ====== |
| + | |||
| + | < | ||
| + | On apprend à déployer une infra de façon reproductible, | ||
| + | </ | ||
| ===== Objectifs ===== | ===== Objectifs ===== | ||
| - | * Comprendre les limites des approches traditionnelles | + | À la fin de cette séance, vous serez capable |
| - | * Identifier les problématiques résolues par l’IaC | + | |
| - | * Découvrir les principes fondamentaux | + | |
| - | * Distinguer les rôles | + | |
| - | ===== 1. Problèmes sans Infrastructure as Code ===== | + | * Comprendre les limites de la gestion manuelle d’infrastructure |
| + | * Expliquer le concept d’Infrastructure as Code | ||
| + | * Distinguer approche déclarative et impérative | ||
| + | * Comprendre le rôle de Terraform et Ansible dans un workflow réel | ||
| - | ===== 1.1 Gestion manuelle des infrastructures | + | ===== 1. Mise en situation |
| - | Dans une approche classique : | + | Vous arrivez dans une entreprise. |
| - | * Création manuelle des machines (console cloud) | + | Un développeur vous dit : |
| - | * Configuration à la main (SSH, scripts) | + | |
| - | * Déploiements non standardisés | + | |
| - | Problèmes | + | "Pour lancer l’environnement |
| + | - démarre un conteneur | ||
| + | - ouvre le port 8080 | ||
| + | - copie les fichiers à la main" | ||
| - | * Erreurs humaines fréquentes | + | Un autre développeur fait différemment. |
| - | * Temps de déploiement long | + | |
| - | * Difficulté à reproduire un environnement | + | |
| - | ===== 1.2 Dérive de configuration (Configuration Drift) ===== | + | Résultat : |
| - | Définition : | + | * environnements différents |
| + | * bugs difficiles à reproduire | ||
| + | * perte de temps | ||
| - | Un système évolue au fil du temps et ne correspond plus à sa configuration initiale. | + | <WRAP round help> |
| + | Question : | ||
| - | Exemple : | + | * Quel est le principal problème ici ? |
| + | </ | ||
| - | * Un serveur en production a été modifié manuellement | + | ===== 2. Problème : gestion manuelle ===== |
| - | * L’environnement de test n’est plus identique | + | |
| - | * Bugs impossibles à reproduire | + | |
| + | En pratique, sans automatisation : | ||
| - | ===== 1.3 Non reproductibilité ===== | + | * actions manuelles (console, SSH) |
| + | * dépend de la personne | ||
| + | * pas versionné | ||
| - | Sans automatisation | + | Exemples concrets |
| - | * Impossible de recréer rapidement | + | * un port ouvert " |
| - | * Dépendance à des connaissances implicites | + | * configuration différente entre dev et prod |
| - | * Documentation souvent obsolète | + | * perte d’informations lors d’un redéploiement |
| + | <WRAP round help> | ||
| + | Question : | ||
| - | ===== 1.4 Passage | + | * Pourquoi ces problèmes sont difficiles |
| + | </ | ||
| - | Exemple | + | ===== 3. Micro-exercice |
| - | * Créer 1 serveur → faisable à la main | + | Objectif : |
| - | * Créer 50 serveurs → ingérable | + | |
| - | Problèmes : | + | Comprendre la difficulté de reproduire un environnement sans automatisation |
| - | * Temps | + | ==== Étape 1 ==== |
| - | * cohérence | + | |
| - | * erreurs cumulées | + | |
| - | ===== 1.5 Manque de traçabilité ===== | + | Fichier : terminal |
| - | Questions difficiles | + | <sxh bash;gutter:false> |
| + | docker run -d -p 8081:80 --name test_nginx nginx | ||
| + | </ | ||
| - | * Qui a modifié quoi ? | + | <WRAP round todo> |
| - | * Quand ? | + | Validation : |
| - | * Pourquoi ? | + | |
| - | ===== 1.6 Transition ===== | + | * Ouvrir http:// |
| + | </ | ||
| - | L’infrastructure devient : | + | ==== Étape 2 ==== |
| - | * trop complexe | + | Fichier : terminal |
| - | * trop dynamique | + | |
| - | * trop critique | + | |
| - | => Besoin d’automatisation et de standardisation | + | <sxh bash; |
| + | echo "< | ||
| + | docker cp index.html test_nginx:/ | ||
| + | </sxh> | ||
| - | ===== 2. Concepts de l’Infrastructure as Code ===== | + | <WRAP round todo> |
| + | Validation : | ||
| - | ===== 2.1 Définition ===== | + | * Rafraîchir la page |
| + | </ | ||
| - | Infrastructure as Code : | + | ==== Étape 3 ==== |
| - | Décrire l’infrastructure sous forme de code afin de pouvoir | + | Fichier |
| - | * versionner | + | <sxh bash; |
| - | * automatiser | + | docker rm -f test_nginx |
| - | * reproduire | + | docker run -d -p 8081:80 --name test_nginx nginx |
| + | </ | ||
| - | ===== 2.2 Principes fondamentaux ===== | + | <WRAP round help> |
| + | Questions : | ||
| - | ==== Déclaratif vs procédural ==== | + | * Que s’est-il passé ? |
| + | * Pourquoi la modification a disparu ? | ||
| + | </ | ||
| - | * Déclaratif : décrire l’état cible | + | ===== 4. Transition ===== |
| - | * Procédural : décrire les étapes | + | |
| - | ==== Idempotence ==== | + | Sans automatisation : |
| - | Appliquer plusieurs fois une configuration produit le même résultat | + | * les modifications sont perdues |
| + | * rien n’est tracé | ||
| + | * difficile à reproduire | ||
| - | ==== Versioning ==== | + | <WRAP round help> |
| + | Question : | ||
| - | * Code stocké | + | * Comment éviter ce problème |
| - | * Historique des modifications | + | </ |
| - | * rollback possible | + | |
| - | ==== Automatisation | + | ===== 5. Définition de l’Infrastructure as Code ===== |
| - | * Déploiement rapide | + | Principe : |
| - | * Réduction des erreurs humaines | + | |
| + | * décrire l’infrastructure avec du code | ||
| + | * versionner ce code (Git) | ||
| + | * exécuter automatiquement | ||
| - | ==== Reproductibilité ==== | + | Analogie : |
| - | * Même code = même infrastructure | + | * avant : configuration "à la main" |
| + | * après : recette écrite et reproductible | ||
| - | ===== 2.3 Cycle de vie ===== | + | ===== 6. Exemple simple |
| - | * Écriture du code | + | Objectif : |
| - | * Planification (diff) | + | |
| - | * Application | + | |
| - | * Mise à jour | + | |
| - | * Destruction | + | |
| - | ===== 3. Deux approches complémentaires ===== | + | * obtenir un serveur web fonctionnel |
| - | ===== 3.1 Vision globale ===== | + | Sans IaC : |
| - | Deux grandes catégories d’outils : | + | * commandes manuelles |
| + | * étapes non tracées | ||
| - | * Provisioning d’infrastructure | + | Avec IaC : |
| - | * Configuration des systèmes | + | |
| - | ===== 3.2 Terraform | + | * fichier |
| + | * playbook Ansible → configure le serveur | ||
| - | Rôle : | + | Résultat |
| - | * Provisionner | + | * reproductible |
| + | * automatisé | ||
| + | * partagé avec l’équipe | ||
| - | Exemples : | + | ===== 7. Déclaratif vs Impératif ===== |
| - | * VM (EC2) | + | ==== Approche impérative ==== |
| - | * Réseau (VPC, subnets) | + | |
| - | * Load balancer | + | |
| - | * Base de données | + | |
| - | Caractéristiques | + | On décrit les étapes |
| - | * Approche déclarative | + | * installer nginx |
| - | * Gestion d’un état (state) | + | * démarrer le service |
| - | * Interaction via API cloud | + | |
| - | ===== 3.3 Ansible ===== | + | Limite : |
| - | Rôle : | + | * dépend de l’état initial |
| - | * Configurer les systèmes | + | ==== Approche déclarative ==== |
| - | * Déployer des applications | + | |
| - | Exemples | + | On décrit le résultat |
| - | * Installer NGINX | + | * "je veux un serveur web" |
| - | * Configurer | + | |
| - | * Déployer une application | + | |
| - | Caractéristiques : | + | L’outil gère les actions nécessaires |
| - | * Approche orientée tâches | + | <WRAP round help> |
| - | * Exécution séquentielle | + | Question : |
| - | * Idempotence | + | |
| - | ===== 3.4 Comparaison | + | * Pourquoi cette approche est-elle adaptée au cloud ? |
| + | </ | ||
| + | |||
| + | ===== 8. Terraform vs Ansible | ||
| Terraform : | Terraform : | ||
| - | * Déclaratif | + | * crée l’infrastructure |
| - | * Orienté | + | * maintient |
| - | * Gère un état global | + | |
| Ansible : | Ansible : | ||
| - | * Orienté | + | * configure les systèmes |
| - | * Configuration logicielle | + | * exécute des tâches |
| - | * Pas de state central | + | |
| + | Exemple : | ||
| + | |||
| + | * Terraform → crée un conteneur | ||
| + | * Ansible → modifie son contenu | ||
| + | |||
| + | ===== 9. Workflow DevOps ===== | ||
| + | |||
| + | * Terraform → infrastructure | ||
| + | * Ansible → configuration | ||
| + | * pipeline → déploiement applicatif | ||
| - | ===== 3.5 Complémentarité ===== | + | Chaîne : |
| - | Dans un workflow réel : | + | Code → Infrastructure → Configuration → Application |
| - | * Terraform crée l’infrastructure | + | ===== 10. Transition vers le TD ===== |
| - | * Ansible configure les serveurs | + | |
| - | ===== 4. Conclusion ===== | + | Dans le TD suivant : |
| - | L’Infrastructure as Code permet : | + | * vous allez automatiser ce que vous venez de faire manuellement |
| + | * créer un service avec Terraform | ||
| + | * le modifier avec Ansible | ||
| - | * d’industrialiser les déploiements | + | Objectif : |
| - | * de fiabiliser les environnements | + | |
| - | * de gagner en rapidité et en reproductibilité | + | |
| - | Terraform et Ansible ne sont pas concurrents mais complémentaires. | + | * comprendre la complémentarité des outils |
| - | ===== 5. Question de réflexion | + | ===== 11. À retenir |
| - | Pourquoi est-il risqué de modifier une infrastructure | + | * IaC = infrastructure |
| + | * objectif : reproductibilité et fiabilité | ||
| + | * Terraform → provisioning | ||
| + | * Ansible → configuration | ||