eadl:bloc4:fm2:td2

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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:33] – [5. Problème volontaire] jcheroneadl:bloc4:fm2:td2 [2026/05/04 01:55] (Version actuelle) – [12.7 Analyse] jcheron
Ligne 179: Ligne 179:
 </sxh> </sxh>
  
-<WRAP round help>+<WRAP round question>
 Questions : Questions :
  
Ligne 193: Ligne 193:
 </sxh> </sxh>
  
-<WRAP help round>+<WRAP round question>
 Question : Question :
  
-  * En quoi cet output est utile dans une chaîne CI/CD ?+  * Donner un exemple concret d’utilisation de cet output dans une pipeline CI/CD (tests, déploiement, monitoring…)
 </WRAP> </WRAP>
 ===== 7. Compréhension ===== ===== 7. Compréhension =====
  
-<WRAP round help+<WRAP round info
-  * Pourquoi utiliser un module plutôt que copier-coller ? +Un module Terraform fonctionne comme une fonction : 
-  * Quel est le rôle des variables ? + 
-  * Que contient le fichier terraform.tfstate ? +  * il prend des entrées (variables) 
-  * Comment Terraform détecte les changements ?+  * il produit des ressources 
 +  * il expose des sorties (outputs) 
 + 
 +Le fichier ''terraform.tfstate'' contient l’état réel de l’infrastructure. 
 + 
 +Terraform compare : 
 + 
 +  * la configuration (code) 
 +  * le state 
 + 
 +pour déterminer les actions à effectuer (création, modification, suppression).
 </WRAP> </WRAP>
 +
 ===== 8. Extension ===== ===== 8. Extension =====
  
Ligne 356: 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> </WRAP>
-<WRAP round help>+<WRAP round question>
 Question : Question :
  
Ligne 402: 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 408: Ligne 419:
 </WRAP> </WRAP>
  
-==== 11.6 Comparaison ====+==== 11.6 Limites ====
  
-<WRAP round help>+<WRAP round question>
 Question : Question :
  
-  * Dans un projet réel avec plusieurs dizaines d’environnementsquels seraient les avantages et les inconvénients de cette approche ?+  * Votre équipe utilise cette approche avec ''map + for_each''
 +Un développeur renomme la clé ''frontend'' en ''front''
 + 
 +  * Que va faire Terraform lors du prochain apply ? 
 +  * Pourquoi ce comportement peut-il être dangereux en production ? 
 +  * Comment éviter ce problème dans un projet réel 
 +</WRAP> 
 + 
 + 
 +===== 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é plusieurs conteneurs nginx avec Terraform. 
 + 
 +Chaque conteneur est accessible via une URL différente : 
 + 
 +  * frontend → http://localhost:8080 
 +  * backend → http://localhost:8081 
 +  * data → http://localhost:8082 
 + 
 +Problème : 
 + 
 +  * toutes les pages nginx sont identiques 
 +  * impossible d’identifier facilement l’environnement 
 + 
 +Objectif : 
 + 
 +Configurer dynamiquement chaque conteneur avec Ansible. 
 + 
 + 
 +==== 12.2 Mise en place d’Ansible ==== 
 + 
 +Créer un dossier : 
 + 
 +<sxh bash;gutter:false> 
 +mkdir ansible 
 +cd ansible 
 +</sxh> 
 + 
 +Créer un fichier ''playbook.yml''
 + 
 +<sxh yaml> 
 +- name: Configuration des conteneurs nginx 
 +  hosts: all 
 +  gather_facts: false 
 + 
 +  tasks: 
 +    - name: Copier une page HTML personnalisée 
 +      copy: 
 +        content: | 
 +          <h1>Environnement : {{ inventory_hostname }}</h1> 
 +          <p>URL : http://localhost:{{ ansible_port }}</p> 
 +        dest: /usr/share/nginx/html/index.html 
 +</sxh> 
 + 
 +<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é 
 +</WRAP> 
 + 
 +==== 12.3 Problème à résoudre ==== 
 + 
 +Ansible a besoin d’un **inventory** pour savoir : 
 + 
 +  * quelles machines cibler 
 +  * comment s’y connecter 
 + 
 +Orces 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 ''inventory.ini''
 + 
 +Indice : 
 + 
 +  * utiliser ''templatefile'' 
 +  * utiliser ''local_file'' 
 + 
 +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 
 +</sxh> 
 + 
 + 
 +==== 12.5 Approche B — Approche découplée ==== 
 + 
 +Utiliser les outputs Terraform pour générer l’inventory avec un script externe. 
 + 
 +<sxh bash;gutter:false> 
 +terraform output -json > outputs.json 
 +</sxh> 
 + 
 +Transformer ce fichier en ''inventory.ini''
 + 
 +Langage au choix : 
 + 
 +  * bash 
 +  * python 
 +  * jq 
 + 
 +==== 12.6 Exécution ==== 
 + 
 +Lancer Ansible : 
 + 
 +<sxh bash;gutter:false> 
 +ansible-playbook -i inventory.ini playbook.yml 
 +</sxh> 
 + 
 +<WRAP round todo> 
 +Vérifier : 
 + 
 +  * chaque URL affiche un contenu différent 
 +</WRAP> 
 + 
 + 
 +==== 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 ? 
 +</WRAP> 
 + 
 + 
 +==== 12.8 Bonus ==== 
 + 
 +<WRAP round todo> 
 +  * Ajouter une variable Terraform ''env_type'' (dev, prod…) 
 +  * L’afficher dans la page HTML via Ansible 
 +</WRAP> 
 + 
 +<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.
 </WRAP> </WRAP>
  
  • eadl/bloc4/fm2/td2.1777811626.txt.gz
  • Dernière modification : il y a 3 jours
  • de jcheron