05/12/2025

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 exemple string, 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 à true si 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.

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.