Introduction à Terraform
Objectifs du chapitre
- Comprendre l'Infrastructure as Code
- Découvrir Terraform et ses concepts
- Comparer avec les alternatives
- Identifier les cas d'usage
1 - Qu'est-ce que l'Infrastructure as Code ?
Le problème traditionnel
La solution IaC
Avantages de l'IaC
| Approche manuelle | Infrastructure as Code |
|---|---|
| Clics dans la console | Code versionné |
| Documentation obsolète | Code = documentation |
| Difficile à reproduire | Déploiement identique |
| Audit complexe | Historique Git |
| Lent et error-prone | Rapide et fiable |
2 - Qu'est-ce que Terraform ?
Définition
Terraform est un outil open-source de HashiCorp pour provisionner et gérer l'infrastructure de manière déclarative.
Caractéristiques clés
| Caractéristique | Description |
|---|---|
| Déclaratif | Vous décrivez l'état final souhaité |
| Agnostique | Fonctionne avec 3000+ providers |
| Idempotent | Même résultat à chaque exécution |
| State | Suivi de l'état de l'infrastructure |
| Plan | Prévisualisation des changements |
3 - Workflow Terraform
Les 4 commandes essentielles
Détail des commandes
| Commande | Action | Quand l'utiliser |
|---|---|---|
init | Initialise le projet | Au début, après ajout provider |
plan | Prévisualise les changements | Avant chaque apply |
apply | Applique les changements | Pour créer/modifier |
destroy | Supprime l'infrastructure | Pour nettoyer |
4 - Concepts fondamentaux
Architecture
Composants principaux
| Composant | Description | Exemple |
|---|---|---|
| Provider | Plugin pour communiquer avec une API | aws, azurerm, google |
| Resource | Élément d'infrastructure à créer | aws_instance, azurerm_virtual_machine |
| Data Source | Lecture de données existantes | aws_ami, azurerm_subscription |
| Variable | Paramètre d'entrée | instance_type, region |
| Output | Valeur exportée | public_ip, dns_name |
| Module | Groupe de ressources réutilisable | vpc-module, ecs-cluster |
| State | Fichier tracking l'infrastructure | terraform.tfstate |
5 - Déclaratif vs Impératif
Approche impérative (scripts)
# Script bash
aws ec2 run-instances \
--image-id ami-12345678 \
--instance-type t2.micro \
--count 1
# Si on relance, on crée une 2ème instance !
Approche déclarative (Terraform)
# Configuration Terraform
resource "aws_instance" "web" {
ami = "ami-12345678"
instance_type = "t2.micro"
}
# Relancer = pas de changement si l'instance existe déjà
6 - Comparaison avec les alternatives
Outils IaC
Tableau comparatif
| Critère | Terraform | CloudFormation | Ansible | Pulumi |
|---|---|---|---|---|
| Type | Provisioning | Provisioning | Config | Provisioning |
| Multi-cloud | ✅ Oui | ❌ AWS only | ✅ Oui | ✅ Oui |
| Langage | HCL | JSON/YAML | YAML | Python/TS/Go |
| State | Externe | Géré AWS | Non | Externe |
| Courbe | Moyenne | Moyenne | Facile | Difficile |
| Licence | BSL | Propriétaire | GPL | Apache |
Quand utiliser Terraform ?
| Cas d'usage | Terraform | Alternative |
|---|---|---|
| Multi-cloud | ✅ Excellent | - |
| AWS uniquement | ✅ Bon | CloudFormation |
| Configuration serveurs | ⚠️ Possible | Ansible |
| Kubernetes | ✅ Bon | Helm, ArgoCD |
| Développeurs | ⚠️ HCL | Pulumi (langages) |
7 - Écosystème HashiCorp
Produits HashiCorp
Terraform Cloud
| Fonctionnalité | OSS | Cloud Free | Cloud Team |
|---|---|---|---|
| Local execution | ✅ | ✅ | ✅ |
| Remote state | ❌ | ✅ | ✅ |
| Collaboration | ❌ | ❌ | ✅ |
| Sentinel policies | ❌ | ❌ | ✅ |
| SSO | ❌ | ❌ | ✅ |
8 - Premier exemple
Fichier de configuration
# main.tf
# Configuration du provider AWS
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "eu-west-1"
}
# Créer une instance EC2
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "HelloTerraform"
}
}
# Afficher l'IP publique
output "public_ip" {
value = aws_instance.web.public_ip
}
Exécution
# Initialiser le projet
terraform init
# Prévisualiser
terraform plan
# Appliquer
terraform apply
# Résultat
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Outputs:
public_ip = "54.123.45.67"
Résumé
Points clés
- Terraform transforme l'infrastructure en code
- Approche déclarative : décrivez l'état final
- Multi-cloud : AWS, Azure, GCP et plus
- Le state suit l'état réel de l'infrastructure
- Plan avant apply : toujours prévisualiser
Exercices pratiques
- Expliquez la différence entre IaC et scripts traditionnels
- Citez 3 avantages de Terraform
- Quel est le rôle du state file ?
- Comparez Terraform et Ansible