Déclarer les variables dans le fichier variables.tf
Terraform permet de rendre ses configurations plus souples et réutilisables en utilisant des variables d’entrée. Celles-ci sont déclarées dans un fichier dédié, généralement nommé variables.tf et elles servent à fournir des paramètres dynamiques au moment de l’exécution. Cette méthode évite de coder les valeurs en dur dans les fichiers .tf et facilite l’adaptation d’un même projet à différents contextes (environnements, tailles de machine, zones géographiques, etc.).
La séparation entre la déclaration et l’assignation des variables est la meilleure pratique pour avoir des configurations modulaires et facilement adaptables. Les définitions sont regroupées dans variables.tf, tandis que les valeurs concrètes sont généralement placées dans un fichier terraform.tfvars, comme nous le verrons dans la section suivante.
Les variables sont déclarées à l’aide du bloc variable, suivi du nom de la variable entre guillemets. À l’intérieur de ce bloc, on peut spécifier plusieurs attributs, notamment :
type: le type attendu (par exemplestring,number,bool,list(string),map(string), etc.) ;description: un court texte explicatif, utile pour la documentation du projet ;default: une valeur par défaut optionnelle, utilisée si aucune valeur n’est fournie lors de l’exécution ;sensitive: un attribut facultatif àtruesi la variable contient une donnée confidentielle (ex. : mot de passe ou clé privée).
Voici le fichier variables.tf de notre projet (n'oubliez pas qu'il est disponible dans un dépôt GitHub que vous pouvez cloner) :
# Identifiants d'authentification Azure
variable "ARM_SUBSCRIPTION_ID" {
type = string
}
variable "ARM_CLIENT_ID" {
type = string
}
variable "ARM_CLIENT_SECRET" {
type = string
sensitive = true
}
variable "ARM_TENANT_ID" {
type = string
}
# Groupe de ressources et emplacement
variable "resource_group_name" {
description = "Nom du groupe de ressources Azure"
type = string
}
variable "location" {
description = "Région Azure dans laquelle déployer les ressources"
type = string
default = "canadaeast"
}
# Paramètres réseau
variable "vnet_address_space" {
description = "Plage d'adresses IP pour le vNet"
type = list(string)
default = ["10.0.0.0/16"]
}
variable "subnet_prefix" {
description = "Préfixe IP pour le sous-réseau principal"
type = list(string)
default = ["10.0.1.0/24"]
}
# Machine virtuelle
variable "vm_name" {
description = "Nom de la machine virtuelle"
type = string
}
variable "vm_size" {
description = "Taille de la machine virtuelle"
type = string
default = "Standard_B1s"
}
variable "os_disk_size_gb" {
description = "Taille du disque système en Go"
type = number
default = 30
}
# Image Ubuntu 24.04 LTS (x64 Gen2)
variable "image_publisher" {
type = string
default = "Canonical"
}
variable "image_offer" {
type = string
default = "0001-com-ubuntu-server-noble"
}
variable "image_sku" {
type = string
default = "24_04-lts-gen2"
}
variable "image_version" {
type = string
default = "latest"
}
# Accès SSH
variable "admin_username" {
description = "Nom d'utilisateur pour se connecter à la VM"
type = string
default = "adminuser"
}
variable "ssh_public_key" {
description = "Clé publique SSH"
type = string
sensitive = true
}
# Tag environnement
variable "environment_tag" {
description = "Indique l'environnement de déploiement (dev, test, prod)"
type = string
default = "dev"
}
# Accès SSH pour remote-exec
variable "ssh_private_key" {
description = "Clé privée SSH pour se connecter à la VM"
type = string
sensitive = true
}
Comme vous pouvez le constater, le fichier variables.tf donne un excellent aperçu de ce que Terraform s’apprête à déployer. En définissant les paramètres attendus, il joue un rôle central dans la configuration du projet, car il permet de personnaliser facilement les ressources sans modifier les fichiers principaux. On y retrouve à la fois des informations d’authentification, des caractéristiques techniques et des choix d’emplacement ou de taille. Vous comprendrez mieux le fonctionnement de ce fichier lorsque nous allons décrire l'état désiré de nos ressources dans main.tf.
À partir de ces variables, le déploiement effectué comprendra :
- L’authentification auprès d’Azure grâce aux identifiants du Service Principal (client ID, secret, ID de l’abonnement et du tenant).
- La création d’un groupe de ressources Azure qui servira de conteneur pour tous les autres éléments.
- La configuration réseau, avec un réseau virtuel (vNet) et un sous-réseau associé, définis selon des plages IP personnalisables.
- Le déploiement d’une machine virtuelle Ubuntu dont on peut spécifier le nom, la taille, la région Azure et l’image utilisée.
- L’ajout d’une clé publique SSH qui nous permettra de nous connecter à la VM, sans mot de passe.
- L’attribution d’un tag environnement, utile pour le suivi, l’organisation ou la facturation des ressources dans Azure.
- L’exécution de commandes à distance via un provisionneur
remote-exec(que nous présenterons plus bas). Grâce à la clé privée SSH fournie, nous allons pouvoir automatiser des tâches post-installation comme l’ajout d’un fichier ou l’installation de Terraform dans la VM.
CChaque bloc variable suit la même structure : un nom, un type de données (string, number, list...), une description facultative, une valeur par défaut (le cas échéant), et un indicateur sensitive si la variable contient une donnée confidentielle. Il est recommandé d’utiliser le style snake_case pour nommer les variables, afin de garder une cohérence dans l’ensemble du projet.
