Aller au contenu principal

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 manuelleInfrastructure as Code
Clics dans la consoleCode versionné
Documentation obsolèteCode = documentation
Difficile à reproduireDéploiement identique
Audit complexeHistorique Git
Lent et error-proneRapide 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éristiqueDescription
DéclaratifVous décrivez l'état final souhaité
AgnostiqueFonctionne avec 3000+ providers
IdempotentMême résultat à chaque exécution
StateSuivi de l'état de l'infrastructure
PlanPrévisualisation des changements

3 - Workflow Terraform

Les 4 commandes essentielles

Détail des commandes

CommandeActionQuand l'utiliser
initInitialise le projetAu début, après ajout provider
planPrévisualise les changementsAvant chaque apply
applyApplique les changementsPour créer/modifier
destroySupprime l'infrastructurePour nettoyer

4 - Concepts fondamentaux

Architecture

Composants principaux

ComposantDescriptionExemple
ProviderPlugin pour communiquer avec une APIaws, azurerm, google
ResourceÉlément d'infrastructure à créeraws_instance, azurerm_virtual_machine
Data SourceLecture de données existantesaws_ami, azurerm_subscription
VariableParamètre d'entréeinstance_type, region
OutputValeur exportéepublic_ip, dns_name
ModuleGroupe de ressources réutilisablevpc-module, ecs-cluster
StateFichier tracking l'infrastructureterraform.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èreTerraformCloudFormationAnsiblePulumi
TypeProvisioningProvisioningConfigProvisioning
Multi-cloud✅ Oui❌ AWS only✅ Oui✅ Oui
LangageHCLJSON/YAMLYAMLPython/TS/Go
StateExterneGéré AWSNonExterne
CourbeMoyenneMoyenneFacileDifficile
LicenceBSLPropriétaireGPLApache

Quand utiliser Terraform ?

Cas d'usageTerraformAlternative
Multi-cloud✅ Excellent-
AWS uniquement✅ BonCloudFormation
Configuration serveurs⚠️ PossibleAnsible
Kubernetes✅ BonHelm, ArgoCD
Développeurs⚠️ HCLPulumi (langages)

7 - Écosystème HashiCorp

Produits HashiCorp

Terraform Cloud

FonctionnalitéOSSCloud FreeCloud 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

  1. Expliquez la différence entre IaC et scripts traditionnels
  2. Citez 3 avantages de Terraform
  3. Quel est le rôle du state file ?
  4. Comparez Terraform et Ansible

← Table des matières | Installation →