Terraform
Terraform est un outil d'Infrastructure as Code (IaC) développé par HashiCorp. Il permet de :
- Définir et provisionner des infrastructures cloud (AWS, Azure, GCP) ou locales via du code.
- Gérer l'état des ressources (création, modification, suppression).
- Automatiser le déploiement de serveurs, réseaux, bases de données, etc.
Fonctionnalités Clés
Multi-cloud : Compatible avec 300+ fournisseurs (providers).
Planification (terraform plan) : Prévisualise les changements avant application.
Gestion d'état : Fichier terraform.tfstate pour suivre les ressources.
Modules réutilisables : Partage de configurations (ex : un module "VPC AWS").
Pourquoi utiliser Terraform ?
- Reproductibilité : Même infrastructure déployable en 1 commande.
- Collaboration : Versionnement possible via Git.
- Évite la dérive de configuration (configuration drift).
Commandes clés :
terraform init # Initialise le projet (télécharge les providers)
terraform plan # Affiche les modifications prévues
terraform apply # Applique les changements
terraform destroy # Détruit les ressources
Cas d'Usage
- Cloud : Déploiement automatisé d’un cluster Kubernetes (EKS/AKS/GKE).
- Hybride : Gestion conjointe de ressources cloud et on-premises.
- Collaboratif : Équipes DevOps partageant des modules Terraform.
Bon à savoir
- Langage HCL (Hashicorp Configuration Language) : Simple et lisible.
- Alternatives : Pulumi (code Python/JS), AWS CDK.
Installation
apt install terraform
Puis créer un dossier où vous mettrez vos projets
Utilisation
Dans cet exemple nous allons déployer une VM dans proxmox a partir d'un template
Créer un fichier main.tf
nano main.tf
Se rendre dans le fichier nouvellement créé, c'est ici que nous allons configurer notre VM (le script est à modifier a votre convenance) :
terraform {
required_providers {
proxmox = {
source = "Telmate/proxmox"
}
}
}
provider "proxmox" {
pm_api_url = "https://<ADRESSE_IP_PROXMOX>:8006/api2/json"
pm_user = "<UTILISATEUR>@pam"
pm_password = "<MOT_DE_PASSE>"
pm_tls_insecure = true
}
resource "proxmox_vm_qemu" "vm_exemple" {
name = "vm-generique"
target_node = "noeud_proxmox"
clone = "template-de-base"
full_clone = true
cores = 2
memory = 2048
sockets = 1
vmid = 100
disk {
size = "20G"
type = "sata"
storage = "stockage_local"
}
network {
model = "virtio"
bridge = "vmbr0"
}
}
Déployer votre VM avec les commandes suivantes :
terraform init # Initialise le projet (télécharge les providers) terraform plan # Affiche les modifications prévues terraform apply # Applique les changements