Terraform et l'Infrastructure as Code
Provisionner un serveur à la main, c'est rapide pour un. Pour dix, c'est du copier-coller. Pour cent, c'est une source permanente de divergence entre les environnements. L'Infrastructure as Code (IaC) résout ce problème en décrivant l'infrastructure dans des fichiers versionnables, reproductibles et auditables.
Qu'est-ce que l'Infrastructure as Code
L'IaC traite l'infrastructure comme du code source : elle est décrite dans des fichiers texte, versionnée dans Git, revue en pull request, et appliquée via un pipeline automatisé. L'état cible est déclaré, pas scripté : on décrit ce que l'infrastructure doit être, pas les commandes pour y arriver.
Trois propriétés fondamentales :
- Idempotence : appliquer la configuration deux fois produit le même résultat.
- Reproductibilité : recréer un environnement identique à partir du code source.
- Traçabilité : l'historique Git est l'historique de l'infrastructure.
Terraform dans l'écosystème IaC
Plusieurs outils coexistent, avec des philosophies différentes :
- Terraform / OpenTofu : déclaratif, multi-provider, state explicite. Le standard de facto pour le provisioning d'infrastructure cloud et on-premise.
- Ansible : procédural/déclaratif, orienté gestion de configuration et déploiement applicatif. Complémentaire à Terraform, pas concurrent.
- CloudFormation : déclaratif, AWS uniquement. Puissant dans l'écosystème AWS, inexploitable ailleurs.
- Pulumi : IaC en langages de programmation classiques (Python, Go, TypeScript). Alternative à HCL pour les équipes qui préfèrent un vrai langage.
Terraform et Ansible sont souvent utilisés ensemble : Terraform provisionne l'infrastructure (VM, réseau, DNS, stockage), Ansible configure les OS et déploie les applications.
HCL : HashiCorp Configuration Language
Terraform utilise HCL, un langage déclaratif conçu pour être lisible par les humains et parseable par les machines. Syntaxe de base :
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t3.micro"
tags = {
Name = "web-server"
Environment = "prod"
}
}
variable "instance_type" {
type = string
default = "t3.micro"
}
output "public_ip" {
value = aws_instance.web.public_ip
}HCL ressemble à JSON mais est bien plus lisible : pas de guillemets obligatoires sur les clés, commentaires avec #, interpolation de variables avec ${}.
OpenTofu : le fork open-source
En 2023, HashiCorp a changé la licence de Terraform de Mozilla Public License (open-source) vers Business Source License (propriétaire au-delà d'un certain usage). La communauté a répondu avec OpenTofu, un fork open-source maintenu par la Linux Foundation. OpenTofu est compatible HCL avec Terraform 1.5, les deux outils évoluent désormais en parallèle. Les concepts de cette formation s'appliquent aux deux.