Infrastructure as Code : premiers pas avec Terraform
🎯 Objectifs
- ✅ Comprendre le concept d'Infrastructure as Code (IaC)
- ✅ Installer et configurer Terraform
- ✅ Maîtriser la syntaxe HCL de base
- ✅ Créer et détruire des ressources avec le provider Docker
- ✅ Connaître le workflow Terraform : init → plan → apply → destroy
📋 Prérequis
- Linux Intermédiaire (ligne de commande, éditeur de texte)
- Docker Débutant (Docker installé et fonctionnel)
📖 Pourquoi l'Infrastructure as Code ?
Le problème
Sans IaC, l'infrastructure est configurée manuellement. Résultat : des serveurs flocons de neige (snowflake servers) - chaque machine est unique, impossible à reproduire. Le moindre changement non documenté crée une dérive de configuration (configuration drift).
La solution
Décrire toute l'infrastructure dans du code, le versionner avec Git, et le reproduire à volonté.
| Avantage | Description |
|---|---|
| 🔄 Reproductibilité | Même code = même infrastructure, à chaque fois |
| 📝 Versioning | Historique complet des changements (Git) |
| ⚡ Automatisation | Déploiement en une commande |
| 📚 Documentation | Le code est la documentation |
🔍 Outils IaC - Comparaison rapide
| Outil | Approche | Langage | Cloud |
|---|---|---|---|
| Terraform | Déclarative | HCL | Multi-cloud |
| Ansible | Impérative | YAML | Multi-cloud |
| Pulumi | Déclarative | Python, Go, TS | Multi-cloud |
| CloudFormation | Déclarative | JSON/YAML | AWS uniquement |
💡 Terraform est l'outil IaC le plus populaire grâce à son approche multi-cloud et sa communauté active.
🔧 Installation
Linux (Ubuntu/Debian)
sudo apt-get update && sudo apt-get install -y gnupg software-properties-common
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt-get update && sudo apt-get install terraformmacOS
brew tap hashicorp/tap
brew install hashicorp/tap/terraformVérification
terraform -version
# Terraform v1.9.x🧩 Concepts clés
| Concept | Description |
|---|---|
| Provider | Plugin qui connecte Terraform à une plateforme (Docker, AWS, Azure…) |
| Resource | Élément d'infrastructure à créer (conteneur, réseau, VM…) |
| State | Fichier qui stocke l'état actuel de l'infrastructure gérée |
| Plan | Aperçu des changements avant application |
🔄 Workflow Terraform
terraform init → terraform plan → terraform apply → terraform destroy
(setup) (prévisualiser) (appliquer) (supprimer)- init - Télécharge les providers et initialise le projet
- plan - Montre ce qui va être créé/modifié/détruit (lecture seule)
- apply - Applique les changements réels
- destroy - Supprime toutes les ressources gérées
📝 Syntaxe HCL - Les bases
Terraform utilise une approche déclarative : vous décrivez l'état souhaité, Terraform calcule les actions nécessaires.
Bloc Provider
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 3.0"
}
}
}
provider "docker" {}Bloc Resource
resource "type_ressource" "nom_local" {
argument1 = "valeur1"
argument2 = "valeur2"
}🏗️ Premier projet - Conteneur Nginx avec Docker
Aucun compte cloud nécessaire ! On utilise Docker en local.
Créer main.tf
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 3.0"
}
}
}
provider "docker" {}
resource "docker_image" "nginx" {
name = "nginx:alpine"
keep_locally = false
}
resource "docker_container" "web" {
name = "mon-nginx"
image = docker_image.nginx.image_id
ports {
internal = 80
external = 8080
}
}Étapes
# 1. Initialiser le projet
terraform init
# 2. Prévisualiser les changements
terraform plan
# 3. Appliquer (crée le conteneur)
terraform apply
# Tapez "yes" pour confirmer
# 4. Vérifier
curl http://localhost:8080
# 5. Nettoyer
terraform destroy⚠️
terraform applymodifie votre infrastructure réelle. Lisez toujours le plan avant de confirmer !
📋 Commandes essentielles
| Commande | Description |
|---|---|
terraform init | Initialise le projet, télécharge les providers |
terraform plan | Affiche les changements prévus |
terraform apply | Applique les changements |
terraform destroy | Supprime toutes les ressources |
terraform fmt | Formate le code HCL |
terraform validate | Vérifie la syntaxe du code |
terraform show | Affiche l'état actuel |
❌ Erreurs courantes
| Erreur | Cause | Solution |
|---|---|---|
Provider not found | terraform init non exécuté | Lancer terraform init |
Docker not running | Daemon Docker arrêté | sudo systemctl start docker |
Port already in use | Port 8080 occupé | Changer le port external |
Permission denied | Droits Docker insuffisants | Ajouter l'utilisateur au groupe docker |
State lock | Autre processus en cours | Attendre ou terraform force-unlock |
🎯 Points clés
- L'IaC transforme l'infrastructure en code versionnable et reproductible
- Terraform est déclaratif : vous décrivez le résultat, pas les étapes
- Le workflow init → plan → apply est la base de tout projet Terraform
- Le state (
terraform.tfstate) est critique - ne jamais le modifier manuellement - Le plan doit toujours être relu avant d'appliquer des changements
📚 Ressources
🚀 Prochaines étapes
Vous avez créé vos premières ressources Terraform. Approfondissez :
- Terraform : variables, modules et gestion du state - Variables, state management et modules réutilisables