Structure du projet Terraform
Avant de pouvoir automatiser le déploiement de notre infrastructure, nous devons structurer notre projet Terraform à l’aide de plusieurs fichiers de configuration. Chacun joue un rôle spécifique dans l’organisation du code et la gestion des ressources. Certains définissent le provider à utiliser, d’autres déclarent les variables ou encore les ressources à créer, tandis que d’autres encore spécifient les sorties à afficher à la fin du déploiement.
I. Arborescence du projet
L’approche retenue ici repose sur une organisation simple et modulaire, répartie dans un répertoire terraform dédié :
cours-terraform/ # Répertoire racine du projet
├── .gitignore # Fichier pour exclure certains fichiers du contrôle de version
└── terraform/ # Répertoire contenant les fichiers Terraform
├── main.tf # Configuration principale des ressources
├── outputs.tf # Définition des valeurs de sortie
├── provider.tf # Déclaration du provider et configuration du backend
├── terraform.tfvars # Valeurs concrètes assignées aux variables
├── variables.tf # Déclaration des variables utilisées
Même si Terraform interprète tous les fichiers ayant l’extension .tf dans un répertoire donné comme un tout unifié (sans se soucier de leur nom), il est préférable de les organiser par fonction. Cette approche facilite la lecture du code, la maintenance à long terme ainsi que la collaboration entre les membres d’une équipe. L'organisation retenue ici n’est pas imposée par l’outil, mais elle constitue une bonne pratique largement adoptée dans la communauté.
Il est tout à fait possible de débuter avec Terraform en déclarant ses ressources directement dans un seul fichier, sans utiliser de variables ou de structures particulières. Bien que cette qu'elle puisse sembler plus simple au départ, travailler avec un fichier de configuration devient rapidement difficile à maintenir dès que le projet prend un peu d’ampleur. Dans ce cours, nous avons choisi de vous présenter dès le départ une structure qui s'appuie sur les meilleures pratiques afin que vous puissiez acquérir immédiatement de bons réflexes qui vous permettront de rendre vos configurations plus lisibles et évolutives.
Pour mettre en place l'arborescence proposée, commencez par créer un répertoire nommé cours-terraform (c'est le nom retenu dans le dépôt GitHub de ce cours) :
# Linux ou Git Bash
mkdir cours-terraform
# PowerShell
New-Item -Type Directory -Name cours-terraform
Comme nous vous suggérons fortement d'utiliser Git et que vous devriez l'avoir installé, il faudra initialiser ce répertoire pour que le contenu soit versionné :
# Linux ou Git Bash
git --version # Vérifier l'installation de Git
cd cours-terraform
git init
Initialized empty Git repository
# PowerShell
Set-Location -Path cours-terraform
git init
Initialized empty Git repository
Notre projet Terraform sera contenu dans un répertoire nommé simplement terraform :
# Linux ou Git Bash
mkdir terraform
# PowerShell
New-Item -Type Directory -Name terraform
Vous pouvez utiliser les commandes qui suivent pour créer les fichiers du projet :
# Linux ou Git Bash
touch main.tf outputs.tf provider.tf terraform.tfvars variables.tf
# PowerShell
New-Item -Type File -Name main.tf, outputs.tf, provider.tf, terraform.tfvars, variables.tf
Il nous reste à créer un fichier .gitignore que nous allons expliquer dans la prochaine section. Vous pouvez revenir à la racine du dépôt et exécuter les commandes qui suivent :
# Linux ou Git Bash
cd ..
touch .gitignore
# PowerShell
cd..
New-Item -Type File -Name .gitignore
Cette arborescence va nous permettre de bien structurer notre projet et de le rendre plus facile à suivre.
II. La suite des opérations
Après avoir défini notre fichier .gitignore nous allons suivre une progression logique en 5 étapes où nous commencerons par définir notre provider dans le fichier .providers.tf (1), puis les variables dans .variables.tf (2) et leurs valeurs concrètes dans .terraform.tfvars (3).
Nous décrirons ensuite les ressources à déployer dans .main.tf (4) en nous appuyant sur les variables définies précédemment.
Enfin, nous conclurons cette séquence avec le fichier outputs.tf (5) qui permet de rendre accessibles les informations clés du déploiement, comme l’adresse IP d’une machine virtuelle ou l’identifiant d’un groupe de ressources. Ce sera ensuite l'occasion de procéder au déploiement en suivant le workflow Terraform présenté précédemm
