Semaine 21-22 : Infrastructure as Code (IaC) 💻
Objectifs pédagogiques
- Comprendre et appliquer les concepts de l’Infrastructure as Code (IaC).
- Automatiser le déploiement d’infrastructures complètes sur le cloud en utilisant Terraform.
- Automatiser la configuration des serveurs et des applications à l’aide d’Ansible.
- Intégrer les principes GitOps et CI/CD dans le cycle de vie de l’infrastructure.
Sommaire de Navigation
- 1. Concepts Fondamentaux de l’Infrastructure as Code (IaC)
- 2. Terraform : Outil de Provisionnement d’Infrastructure
- 3. Ansible : Outil de Gestion de Configuration
- 4. Intégration CI/CD et GitOps
1 — Concepts Fondamentaux de l’Infrastructure as Code (IaC)
L’Infrastructure as Code (IaC) est la gestion de l’infrastructure informatique (réseaux, machines virtuelles, bases de données) en utilisant des fichiers de configuration et du code, plutôt que des processus manuels ou interactifs.
Avantages de l’IaC
- Cohérence : Garantit que l’environnement de développement, de test et de production sont identiques.
- Vitesse : Permet le déploiement rapide et reproductible d’environnements complexes.
- Documentation : Le code lui-même sert de documentation exacte de l’état de l’infrastructure.
- Traçabilité : L’utilisation de systèmes de contrôle de version (comme Git) permet de suivre l’historique de chaque changement.
IaC : Impératif vs. Déclaratif
| Modèle | Description | Exemple (Outil) |
|---|---|---|
| Déclaratif | L’utilisateur décrit l’état final souhaité. L’outil détermine les étapes nécessaires pour y parvenir. (Approche privilégiée par Terraform) | Terraform, Kubernetes |
| Impératif | L’utilisateur spécifie les étapes précises (commandes) à exécuter dans un ordre donné pour atteindre l’état souhaité. | Ansible, Script Shell |
2 — Terraform : Outil de Provisionnement d’Infrastructure
Terraform (de HashiCorp) est l’outil standard pour le provisionnement déclaratif d’infrastructure. Il est « agnostique » (multi-cloud) et fonctionne avec AWS, Azure, GCP, VMware, etc.
Principes de Fonctionnement
- Fichiers HCL : Terraform utilise le langage de configuration HashiCorp Configuration Language (HCL). Ces fichiers décrivent les ressources à créer.
- Providers : Un provider est le « connecteur » de Terraform vers une plateforme cloud (ex: aws, azurerm).
- State File : Terraform maintient un fichier d’état (state file) qui mappe les ressources décrites dans votre code HCL aux ressources réelles dans le cloud. Ce fichier est crucial pour le suivi des ressources.
Cycle de Vie Terraform
# Initialisation du répertoire et des providers
terraform init
# Planification : Affiche les changements à effectuer pour atteindre l'état souhaité (Dry Run)
terraform plan
# Application : Exécute les changements et crée/modifie/supprime les ressources
terraform apply
# Destruction : Supprime toutes les ressources gérées par ce fichier d'état
terraform destroy
Exemple de Ressource (HCL)
# Déclare la création d'une instance virtuelle AWS
resource "aws_instance" "srv_web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "Web-Server-IAC"
}
}
3 — Ansible : Outil de Gestion de Configuration
Ansible est un outil impératif de gestion de configuration, idéal pour installer des logiciels, configurer des fichiers et démarrer des services sur des serveurs déjà provisionnés (par Terraform ou manuellement).
Avantages d’Ansible
- Sans Agent : Ansible utilise SSH pour se connecter aux machines Linux et WinRM pour Windows. Il n’est pas nécessaire d’installer un logiciel client (agent) sur les serveurs cibles.
- Idempotence : Une opération Ansible peut être exécutée plusieurs fois sans changer l’état du système après la première exécution (si elle a réussi).
Concepts Clés
- Inventaire : Un fichier (souvent INI ou YAML) qui liste les hôtes cibles sur lesquels Ansible doit opérer.
- Playbooks : Fichiers YAML qui décrivent l’ensemble des tâches à exécuter sur les hôtes, organisées en « plays » et « tasks ».
- Modules : Des scripts intégrés qui exécutent des actions spécifiques (ex: le module ‘apt’ pour installer des paquets, le module ‘service’ pour gérer des services).
Exemple de Playbook (YAML)
- name: Installer et démarrer le serveur Web Nginx
hosts: web_servers
tasks:
- name: Installer Nginx
ansible.builtin.apt:
name: nginx
state: present
- name: S'assurer que le service Nginx est démarré
ansible.builtin.service:
name: nginx
state: started
enabled: yes
4 — Intégration CI/CD et GitOps
Pour un environnement IaC complet, les fichiers de code (HCL, YAML) sont gérés par Git et déployés via des pipelines CI/CD (Continuous Integration/Continuous Delivery).
Principes du GitOps
Le GitOps étend l’IaC en faisant du référentiel Git la seule source de vérité pour l’état déclaratif de l’infrastructure.
- Flux de travail : Tout changement doit être une Pull Request (PR) sur le référentiel Git, examiné et approuvé par les pairs.
- Déploiement : Une fois fusionnée, la modification est automatiquement appliquée à l’environnement par un outil de CI/CD.
Pipeline CI/CD (Intégration et Livraison Continues)
Les étapes typiques d’un pipeline pour l’IaC incluent :
- Commit : Le code Terraform/Ansible est poussé vers Git.
- Build/Test (CI) : Le pipeline vérifie la syntaxe du code (linters) et exécute ‘terraform plan’.
- Approbation : L’administrateur approuve le plan de changement.
- Deploy (CD) : Le pipeline exécute ‘terraform apply’ pour appliquer les changements en production.