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:td2 [2026/05/03 14:43] – [11.6 Comparaison] jcheron | eadl:bloc4:fm2:td2 [2026/05/04 01:55] (Version actuelle) – [12.7 Analyse] jcheron | ||
|---|---|---|---|
| Ligne 179: | Ligne 179: | ||
| </ | </ | ||
| - | <WRAP round help> | + | <WRAP round question> |
| Questions : | Questions : | ||
| Ligne 193: | Ligne 193: | ||
| </ | </ | ||
| - | <WRAP round help> | + | <WRAP round question> |
| Question : | Question : | ||
| Ligne 367: | Ligne 367: | ||
| Terraform crée une instance par entrée dans la map. | Terraform crée une instance par entrée dans la map. | ||
| </ | </ | ||
| - | <WRAP round help> | + | <WRAP round question> |
| Question : | Question : | ||
| Ligne 413: | Ligne 413: | ||
| ==== 11.5 Analyse ==== | ==== 11.5 Analyse ==== | ||
| - | <WRAP round help> | + | <WRAP round question> |
| * Si vous supprimez un environnement de la map, que va faire Terraform ? | * Si vous supprimez un environnement de la map, que va faire Terraform ? | ||
| * Que se passe-t-il si vous renommez une clé ? | * Que se passe-t-il si vous renommez une clé ? | ||
| Ligne 419: | Ligne 419: | ||
| </ | </ | ||
| - | ==== 11.6 Comparaison | + | ==== 11.6 Limites |
| - | <WRAP round help> | + | <WRAP round question> |
| Question : | Question : | ||
| - | * Quels seraient les impacts d’une | + | * Votre équipe utilise cette approche |
| - | | + | Un développeur renomme la clé '' |
| - | | + | |
| - | * la lisibilité | + | * Pourquoi ce comportement peut-il être dangereux en production ? |
| - | * la gestion des erreurs | + | * Comment éviter ce problème dans un projet réel ? |
| + | </ | ||
| - | dans un projet avec plusieurs | + | |
| + | ===== 12. Extension — Terraform → Ansible ===== | ||
| + | |||
| + | ==== Objectifs ==== | ||
| + | |||
| + | * Réutiliser les outputs Terraform | ||
| + | * Introduire Ansible comme outil de configuration | ||
| + | * Comprendre l’intégration entre outils | ||
| + | * Comparer deux approches d’architecture | ||
| + | |||
| + | |||
| + | ==== 12.1 Contexte ==== | ||
| + | |||
| + | Vous avez déployé | ||
| + | |||
| + | Chaque conteneur est accessible via une URL différente : | ||
| + | |||
| + | * frontend → http:// | ||
| + | * backend → http:// | ||
| + | * data → http:// | ||
| + | |||
| + | Problème : | ||
| + | |||
| + | * toutes les pages nginx sont identiques | ||
| + | * impossible | ||
| + | |||
| + | Objectif : | ||
| + | |||
| + | Configurer dynamiquement chaque conteneur avec Ansible. | ||
| + | |||
| + | |||
| + | ==== 12.2 Mise en place d’Ansible ==== | ||
| + | |||
| + | Créer un dossier : | ||
| + | |||
| + | <sxh bash; | ||
| + | mkdir ansible | ||
| + | cd ansible | ||
| + | </ | ||
| + | |||
| + | Créer un fichier '' | ||
| + | |||
| + | <sxh yaml> | ||
| + | - name: Configuration des conteneurs nginx | ||
| + | hosts: all | ||
| + | gather_facts: | ||
| + | |||
| + | tasks: | ||
| + | - name: Copier une page HTML personnalisée | ||
| + | copy: | ||
| + | content: | | ||
| + | < | ||
| + | < | ||
| + | dest: / | ||
| + | </ | ||
| + | |||
| + | <WRAP round info> | ||
| + | Chaque conteneur aura une page différente en fonction de son nom. | ||
| + | |||
| + | Vous utilisez ici les variables Ansible : | ||
| + | |||
| + | * inventory_hostname → nom de l’hôte | ||
| + | * ansible_port → port utilisé | ||
| </ | </ | ||
| + | ==== 12.3 Problème à résoudre ==== | ||
| + | Ansible a besoin d’un **inventory** pour savoir : | ||
| + | |||
| + | * quelles machines cibler | ||
| + | * comment s’y connecter | ||
| + | |||
| + | Or, ces informations sont connues par Terraform. | ||
| + | |||
| + | Comment faire le lien entre les deux ? | ||
| + | |||
| + | |||
| + | ==== 12.4 Approche A — Génération via Terraform ==== | ||
| + | |||
| + | Modifier Terraform pour générer un fichier '' | ||
| + | |||
| + | Indice : | ||
| + | |||
| + | * utiliser '' | ||
| + | * utiliser '' | ||
| + | |||
| + | Exemple attendu : | ||
| + | |||
| + | <sxh ini> | ||
| + | [web] | ||
| + | frontend ansible_host=localhost ansible_port=8080 | ||
| + | backend ansible_host=localhost ansible_port=8081 | ||
| + | data ansible_host=localhost ansible_port=8082 | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== 12.5 Approche B — Approche découplée ==== | ||
| + | |||
| + | Utiliser les outputs Terraform pour générer l’inventory avec un script externe. | ||
| + | |||
| + | <sxh bash; | ||
| + | terraform output -json > outputs.json | ||
| + | </ | ||
| + | |||
| + | Transformer ce fichier en '' | ||
| + | |||
| + | Langage au choix : | ||
| + | |||
| + | * bash | ||
| + | * python | ||
| + | * jq | ||
| + | |||
| + | ==== 12.6 Exécution ==== | ||
| + | |||
| + | Lancer Ansible : | ||
| + | |||
| + | <sxh bash; | ||
| + | ansible-playbook -i inventory.ini playbook.yml | ||
| + | </ | ||
| + | |||
| + | <WRAP round todo> | ||
| + | Vérifier : | ||
| + | |||
| + | * chaque URL affiche un contenu différent | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== 12.7 Analyse ==== | ||
| + | |||
| + | <WRAP round question> | ||
| + | Questions : | ||
| + | |||
| + | * Quelle approche est la plus simple à mettre en place ? | ||
| + | * Quelle approche est la plus maintenable ? | ||
| + | * Que se passe-t-il si vous ajoutez un nouvel environnement ? | ||
| + | * Quelle solution limite le couplage entre Terraform et Ansible ? | ||
| + | * Dans un projet réel, laquelle choisiriez-vous ? Pourquoi ? | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== 12.8 Bonus ==== | ||
| + | |||
| + | <WRAP round todo> | ||
| + | * Ajouter une variable Terraform '' | ||
| + | * L’afficher dans la page HTML via Ansible | ||
| + | </ | ||
| + | |||
| + | <WRAP round info> | ||
| + | Objectif : | ||
| + | |||
| + | Comprendre comment une information définie dans Terraform | ||
| + | peut être utilisée dans Ansible. | ||
| + | |||
| + | C’est un cas réel fréquent en DevOps. | ||
| + | </ | ||