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 | |||
| eadl:bloc4:fm2:td1 [2026/04/25 11:41] – [5. Lecture globale] jcheron | eadl:bloc4:fm2:td1 [2026/04/25 13:41] (Version actuelle) – jcheron | ||
|---|---|---|---|
| Ligne 7: | Ligne 7: | ||
| * Manipuler Terraform et Ansible sur un exemple simple | * Manipuler Terraform et Ansible sur un exemple simple | ||
| - | ===== 1. Préparation de l’environnement | + | ===== Contexte |
| - | ==== 1.1 Prérequis ==== | + | Vous intégrez une équipe DevOps. |
| - | | + | Actuellement : |
| - | * Docker installé | + | |
| - | * Accès terminal | + | * les configurations sont faites "à la main" |
| + | * les environnements sont incohérents | ||
| - | ==== 1.2 Installation de Terraform ==== | + | Problèmes : |
| - | Vérification des packages : | + | * erreurs humaines fréquentes |
| - | <sxh bash; | + | * impossible de reproduire un environnement |
| - | sudo apt-get update && sudo apt-get install -y gnupg software-properties-common | + | * perte de temps en debug |
| - | </ | + | |
| - | Installer la clé HashiCorp' | + | Objectif |
| - | <sxh bash;gutter:false> | + | |
| - | wget -O- https:// | + | |
| - | gpg --dearmor | \ | + | |
| - | sudo tee / | + | |
| - | </ | + | |
| - | Ajouter le dépôt HashiCorp | + | Automatiser |
| - | <sxh bash; | + | * la création d’un service web (Terraform) |
| - | echo "deb [arch=$(dpkg --print-architecture) signed-by=/ | + | * sa configuration |
| - | </ | + | |
| - | Installer : | + | ===== 1. Préparation de l’environnement ===== |
| - | <sxh bash; | + | |
| - | sudo apt update | + | |
| - | sudo apt-get install terraform | + | |
| - | </ | + | |
| - | Vérification : | + | ==== 1.1 Prérequis ==== |
| - | <sxh bash; | + | * Linux / macOS / WSL recommandé |
| - | terraform version | + | * Docker installé |
| - | </ | + | * Accès terminal |
| - | ==== 1.3 Installation d’Ansible | + | ==== 1.2 Vérification outils |
| - | Sur Ubuntu / Debian | + | <WRAP round todo> |
| + | Vérifier | ||
| - | <sxh bash; | + | * terraform version |
| - | sudo apt update | + | |
| - | sudo apt install | + | * docker --version |
| - | </sxh> | + | </WRAP> |
| - | Vérification | + | <WRAP round help> |
| + | Question | ||
| - | <sxh bash; | + | * Pourquoi est-il important de versionner ses outils en DevOps ? |
| - | ansible --version | + | </WRAP> |
| - | </ | + | |
| - | + | ||
| - | ==== 1.4 Vérification Docker ==== | + | |
| - | + | ||
| - | < | + | |
| - | docker --version | + | |
| - | docker run hello-world | + | |
| - | </sxh> | + | |
| ===== 2. Arborescence du projet ===== | ===== 2. Arborescence du projet ===== | ||
| - | Créer un dossier de travail | + | Fichier |
| - | <sxh> | + | < |
| mkdir iac-demo | mkdir iac-demo | ||
| cd iac-demo | cd iac-demo | ||
| + | mkdir terraform ansible | ||
| </ | </ | ||
| Structure : | Structure : | ||
| - | <sxh ; | + | < |
| iac-demo/ | iac-demo/ | ||
| ├── terraform/ | ├── terraform/ | ||
| Ligne 88: | Ligne 73: | ||
| </ | </ | ||
| - | ===== 3. Exemple | + | ===== 3. Création de l’infrastructure avec Terraform ===== |
| ==== 3.1 Objectif ==== | ==== 3.1 Objectif ==== | ||
| - | Créer un conteneur NGINX avec Terraform | + | Créer un conteneur NGINX |
| - | ==== 3.2 Fichier main.tf | + | ==== 3.2 Configuration |
| - | Chemin | + | Fichier |
| - | terraform/ | + | < |
| - | + | ||
| - | Contenu : | + | |
| - | + | ||
| - | <sxh> | + | |
| terraform { | terraform { | ||
| required_providers { | required_providers { | ||
| Ligne 123: | Ligne 104: | ||
| } | } | ||
| </ | </ | ||
| - | |||
| ==== 3.3 Exécution ==== | ==== 3.3 Exécution ==== | ||
| - | Depuis le dossier terraform | + | Fichier |
| - | <sxh> | + | < |
| cd terraform | cd terraform | ||
| terraform init | terraform init | ||
| Ligne 135: | Ligne 115: | ||
| </ | </ | ||
| - | + | < | |
| - | <WRAP todo> | + | |
| Validation : | Validation : | ||
| Ligne 142: | Ligne 121: | ||
| </ | </ | ||
| - | Vérification du state créé | + | ==== 3.4 Observation ===== |
| - | < | + | Fichier : terminal |
| + | |||
| + | < | ||
| terraform state list | terraform state list | ||
| </ | </ | ||
| - | ===== 4. Exemple Ansible ===== | ||
| - | ==== 4.1 Objectif ==== | + | <WRAP round help> |
| + | Questions : | ||
| - | Configurer un système local avec Ansible | + | * Que contient le state ? |
| - | + | * Pourquoi Terraform en a besoin ? | |
| - | ==== 4.2 Fichier inventory ==== | + | </ |
| - | Chemin : | + | ===== 4. Configuration avec Ansible ===== |
| - | ansible/ | + | ==== 4.1 Inventory ==== |
| - | Contenu | + | Fichier |
| <sxh> | <sxh> | ||
| Ligne 165: | Ligne 146: | ||
| </ | </ | ||
| - | ==== 4.3 Fichier playbook.yml | + | ==== 4.2 Playbook |
| - | Chemin | + | Fichier |
| - | + | ||
| - | ansible/ | + | |
| - | + | ||
| - | Contenu : | + | |
| <sxh yaml> | <sxh yaml> | ||
| Ligne 182: | Ligne 159: | ||
| dest: / | dest: / | ||
| content: | | content: | | ||
| - | | + | <h1>IaC avec Ansible</ |
| - | < | + | |
| - | <meta charset=" | + | |
| - | < | + | |
| - | </ | + | |
| - | | + | |
| - | < | + | |
| - | </html> | + | |
| - name: copier la page dans le conteneur nginx | - name: copier la page dans le conteneur nginx | ||
| Ligne 195: | Ligne 165: | ||
| </ | </ | ||
| - | ==== 4.4 Exécution ==== | + | ==== 4.3 Exécution ==== |
| - | Depuis le dossier ansible | + | Fichier |
| <sxh bash; | <sxh bash; | ||
| cd ../ansible | cd ../ansible | ||
| - | ansible-playbook -i inventory playbook.yml | + | ansible-playbook -i inventory.ini playbook.yml |
| </ | </ | ||
| - | + | < | |
| - | <WRAP todo> | + | |
| Validation : | Validation : | ||
| - | * Ouvrir | + | * Rafraîchir |
| </ | </ | ||
| - | ===== 5. Lecture globale ===== | ||
| - | Terraform : | + | ===== 5. Problème volontaire ===== |
| - | * crée une ressource (conteneur) | + | Modifier le nom du conteneur |
| - | * via API (Docker ici) | + | |
| - | Ansible | + | Fichier |
| - | * configure un système | + | <sxh js; |
| - | * exécute des tâches | + | name = " |
| + | </ | ||
| - | <WRAP info> | + | Relancer : |
| - | Contrairement à Terraform, Ansible ne maintient pas un fichier d’état centralisé. | + | |
| - | Cependant, Ansible est conçu pour être idempotent | + | <sxh bash;gutter:false> |
| - | il vérifie l’état du système avant d’appliquer des changements, | + | terraform apply |
| - | et n’exécute une action que si nécessaire. | + | </ |
| - | **Terraform** | + | Puis rejouer Ansible : |
| - | * sait ce qu’il a créé → grâce au state | + | <sxh bash;gutter:false> |
| - | * compare | + | ansible-playbook -i inventory.ini playbook.yml |
| + | </ | ||
| + | <WRAP round help> | ||
| + | Questions : | ||
| - | **Ansible** | + | |
| + | | ||
| + | | ||
| + | </ | ||
| - | * ne stocke rien | + | ===== 6. Correction ===== |
| - | * regarde directement | + | |
| - | * agit seulement si besoin (si modules bien utilisés) | + | Corriger |
| + | |||
| + | <WRAP round help> | ||
| + | Question : | ||
| + | |||
| + | * Comment éviter ce type de problème en production ? | ||
| </ | </ | ||
| - | ===== 6. Nettoyage ===== | ||
| - | Terraform : | + | ===== 7. Compréhension globale ===== |
| - | <sxh; | + | <WRAP round help> |
| - | cd ../ | + | * Quelle est la différence entre déclaratif et procédural ? |
| - | terraform destroy | + | * Pourquoi séparer Terraform et Ansible ? |
| - | </sxh> | + | * Que se passe-t-il si on relance Terraform plusieurs fois ? |
| + | </WRAP> | ||
| - | ===== 7. Points importants | + | ===== 8. Extension |
| - | | + | <WRAP round todo> |
| - | * Ansible est procédural | + | Modifier : |
| - | * Les deux outils sont complémentaires | + | |
| + | | ||
| + | * le contenu HTML | ||
| + | </ | ||
| + | |||
| + | ===== 9. Challenge ===== | ||
| + | |||
| + | <WRAP round todo> | ||
| + | Créer un deuxième conteneur : | ||
| + | |||
| + | * nom : nginx_test | ||
| + | * port : 8091 | ||
| + | </ | ||
| - | ===== 8. Question | + | ===== 10. Points clés ===== |
| - | Pourquoi séparer la création d’infrastructure et la configuration | + | * Terraform → provisioning |
| + | * Ansible → configuration | ||
| + | * séparation des responsabilités | ||
| + | * reproductibilité | ||