04/12/2025

Qu’est-ce que Terraform ?

I. Bref historique de Terraform

Terraform est un outil d’infrastructure as code (IaC) conçu par la société HashiCorp, également connue pour avoir développé des solutions comme Vagrant, qui permet de créer des environnements de développement reproductibles, ou encore Packer, utilisé pour automatiser la génération d’images système sur différentes plateformes. Lancé en 2014, Terraform a rapidement gagné en popularité grâce à sa capacité à décrire l’état désiré (« desired state ») d’une infrastructure à l’aide de fichiers de configuration écrits dans un langage nommé HashiCorp Configuration Language (HCL).

Le fonctionnement de Terraform repose sur un modèle déclaratif : l’utilisateur décrit l’état final qu’il souhaite obtenir pour son infrastructure. Par exemple, une machine virtuelle Ubuntu hébergée dans une région Azure précise, reliée à un sous-réseau avec une adresse IP publique.

Il ne s'agit pas d'écrire les étapes qui permettent de parvenir à la création d'une ressource comme c'est le cas avec un script qui enchaîne pas à pas les commandes nécessaires pour créer manuellement chaque composant. Lorsqu’un fichier de configuration est appliqué, l’outil analyse l’état actuel des ressources et le compare à l’état attendu. Nous reviendrons plus loin à la fois sur les commandes permettant d'effectuer un déploiement et sur la notion d'état (« state ») qui est un concept fondamental de Terraform.

II. Une solution de type Infrastructure as Code

Comme nous le savons déjà, Terraform s’inscrit dans une approche nommée Infrastructure as Code (IaC) qui fait son apparition au début des années 2010 dans le sillage du mouvement DevOps qui valorise l’automatisation, la collaboration et la standardisation des déploiements. Cette méthode vise à définir et gérer des composants d'infrastructure à l’aide de fichiers de configuration versionnables, plutôt que de les créer manuellement à travers des interfaces graphiques ou des scripts impératifs exécutés ligne par ligne. En décrivant l’état final souhaité, comme une machine virtuelle, un réseau virtuel ou une base de données, l’utilisateur laisse à l’outil IaC le soin de déterminer comment atteindre cet état et d’exécuter automatiquement le « provisionnement » des ressources nécessaires.

L’approche déclarative se distingue des paradigmes impératif ou fonctionnel par la façon dont elle décrit une configuration. Au lieu de détailler chaque étape du processus (programmation impérative) ou de concevoir des fonctions qui transforment les données sans modifier l’état du système (programmation fonctionnelle), elle permet d’énoncer simplement l’état final désiré.

Aujourd'hui, Terraform est probablement l'outil IaC le plus populaire sur le marché, mais il existe plusieurs autres tels que Pulumi, Azure Biceps ou AWS CloudFormation.

Pulumi permet, par exemple, de décrire l’infrastructure à l’aide de langages de programmation généralistes comme TypeScript, Python ou Go, ce qui le rapproche davantage du monde des développeurs habitués à ces langages. Microsoft Azure Bicep et AWS CloudFormation sont des outils conçus spécifiquement pour leur plateforme respective. Ils offrent une intégration native, mais restent étroitement liés à leur environnement cloud, ce qui limite leur portabilité.

À l’inverse, Terraform adopte une position agnostique (vendor neutral) : il repose sur un langage déclaratif dédié (HCL) et il prend en charge une grande variété de technologies grâce à un système modulaire de providers, une notion sur laquelle nous reviendrons par la suite. Cette flexibilité en fait un choix privilégié dans les environnements multi-cloud ou hybrides, car elle permet de minimiser l'enfermement propriétaire (vendor lock-in).

Il est important de ne pas confondre les outils de type Infrastructure as Code comme Terraform avec ceux qui relèvent de la Configuration as Code (CoC), tels qu’Ansible, Chef ou Puppet. Les solutions IaC servent à provisionner des ressources (machines virtuelles, réseaux, etc.), tandis que celles qui font de la Configuration as Code interviennent généralement après le déploiement. En effet, celles-ci sont plutôt utilisées pour configurer le système d’exploitation, installer des paquets, paramétrer des fonctionnalités ou déployer des applications. Les deux approches peuvent donc être complémentaires dans une perspective DevOps complète, mais elles ne remplissent pas exactement le même rôle.

III. Avantages de l'Infrastructure as Code

L’Infrastructure as Code transforme la gestion des environnements informatiques en apportant une plus grande rigueur, une meilleure traçabilité et une automatisation accrue. Cette approche permet aux équipes de déployer, modifier et reproduire des infrastructures de manière à la fois fiable et rapide, tout en réduisant les erreurs humaines. Voici quelques-uns des avantages concrets que l’IaC offre au quotidien :

  • Reproductibilité : En exécutant plusieurs fois la même configuration, on obtient systématiquement le même résultat. Cette approche élimine les écarts dus aux interventions manuelles et elle donne des environnements homogènes. Elle permet également d'éviter la création de snowflakes, ces serveurs uniques configurés manuellement qui sont à la fois difficiles à reproduire et à maintenir.
  • Traçabilité des modifications : Comme l’infrastructure est définie sous forme de code, il est possible de versionner chaque changement avec Git afin de revenir à un état stable en cas d’erreur ou de suivre l’évolution d’un projet dans le temps.
  • Idempotence : Une configuration appliquée plusieurs fois va toujours donner le même résultat, car elle vérifie l’état existant d'une ressource et n'effectue que les ajustements nécessaires pour atteindre l’état désiré. Par exemple, si une machine virtuelle est déjà présente avec les bonnes spécifications, Terraform ne la recréera pas, mais confirmera simplement qu’elle correspond à l’état attendu.

En revanche, si l’on modifie un paramètre comme le nombre de CPU, il est important de savoir que Terraform va procéder à la destruction de la VM puis à sa recréation, tandis que l’ajout d’un disque sera généralement traité comme une mise à jour sans suppression. Ce point est très important à prendre en compte et il est toujours bon de faire des tests avant d'ajouter ou enlever des composants d'une ressource pour anticiper le comportement de l'outil.

  • Immuabilité : Plutôt que de modifier directement les ressources en place, l'IaC privilégie le remplacement des éléments qui ne correspondent plus à la configuration attendue. Cette approche permet de garantir que les changements sont appliqués proprement, en évitant les effets de bord ou les dérives causées par des ajustements manuels. Elle facilite aussi les mises à jour, car chaque modification est traitée comme une nouvelle version de la ressource, déployée de manière contrôlée et reproductible.
  • Évolutivité : En automatisant le provisionnement, l’IaC permet d’augmenter ou de réduire rapidement les ressources en fonction des besoins, sans devoir effectuer de manipulations manuelles complexes. Par exemple, il est possible de modifier une variable pour passer de deux à cinq machines virtuelles, puis de réappliquer la configuration pour que l’infrastructure soit ajustée automatiquement.

Ces caractéristiques et avantages expliquent en grande partie l’adoption massive d’outils comme Terraform dans des environnements très variés. Bien qu’il soit largement utilisé dans les grandes plateformes de cloud public comme Azure, AWS et GCP, Terraform peut également être mis à profit dans des infrastructures sur site, notamment dans des environnements de virtualisation comme VMware vSphere ou Nutanix.

Malgré cette polyvalence, l’évolution récente de Terraform a suscité d’importants débats au sein de la communauté. Des décisions prises par HashiCorp concernant sa licence et sa gouvernance ont conduit à la création d’un projet parallèle open source, ce qui a marqué un tournant significatif dans l’histoire de l’outil.

IV. De Terraform à OpenTofu et acquisition d'HashiCorp par IBM

L’avenir de Terraform soulève aujourd’hui certaines interrogations, notamment en raison du changement de licence de l’outil à l'été 2023, passant d’une licence open source (MPL 2.0) à une Business Source License (BSL) qui introduit des restrictions pour certaines utilisations commerciales, notamment par des fournisseurs de services concurrents. Cette décision a provoqué une réaction immédiate dans la communauté et donnée naissance à un projet parallèle nommé OpenTofu. Ce fork open source est désormais soutenu par la Linux Foundation et plusieurs entreprises du secteur. Il vise à préserver une alternative pleinement ouverte et collaborative à Terraform.

Peu après, en septembre 2023, l’annonce du rachat de HashiCorp par IBM est venue accentuer les incertitudes entourant l’avenir de Terraform. Si les répercussions concrètes restent encore à clarifier, cette acquisition pourrait influer sur les orientations stratégiques de l’outil et favoriser une intégration plus poussée avec l’écosystème commercial d’IBM.

Malgré ces derniers développements, Terraform reste aujourd’hui un outil de référence en matière d’Infrastructure as Code qui est largement adopté par les organisations pour automatiser leurs déploiements. Maintenant que nous comprenons mieux le contexte d'émergence de Terraform et comment il se positionne parmi les outils IaC, voyons maintenant comment installer l'outil afin de préparer un environnement de travail fonctionnel pour écrire nos fichiers de configuration.

author avatar
Luc BRETON Administrateur système et cloud
Administrateur système et cloud avec une orientation DevOps pour une grande chaîne de pharmacies québécoise. Je suis plutôt généraliste avec une forte expérience côté virtualisation, stockage, cloud hybride et un intérêt particulier pour l'automatisation. J'aime le transfert de connaissances et il me fait plaisir d'être la première voix nord-américaine d'IT-Connect !
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.