Principes de base de la syntaxe HCL
Le langage HCL repose essentiellement sur des blocs, des paires clé-valeur et des structures de données comme les listes et les objets. Les blocs sont les unités fondamentales d’une configuration Terraform. Ils définissent des éléments tels que des ressources, des variables ou encore des providers.
La structure générale d’un bloc comprend un type, un nom (et parfois un identifiant), suivis d’un ensemble d’attributs encadrés par des accolades. En voici un exemple :
resource "azurerm_virtual_machine" "vm01" {
name = "my-vm"
location = "canadaeast"
}
Pour mieux comprendre les composants de ce bloc resource, nous pouvons le décomposer en 5 éléments :
resource: mot-clé utilisé pour déclarer une ressource que Terraform doit gérer."azurerm_virtual_machine": type de ressource, ici une machine virtuelle Azure."vm01": nom logique de la ressource dans Terraform qui sert d’identifiant interne dans le code.name = "my-vm": nom de la machine virtuelle tel qu’il apparaîtra dans Azure.location = "canadaeast": région dans laquelle la ressource sera déployée (Canada East, dans cet exemple).
Chaque bloc contient des paires clé-valeur qui associent un paramètre à une valeur spécifique. Cette notation rappelle à la fois le YAML et le JSON par sa structure hiérarchique : elle reprend la lisibilité du premier avec une structure hiérarchique claire, tout en conservant la précision du second. Le HCL maintient un équilibre entre clarté et concision tout en demeurant facilement lisible pour l'humain. Il utilise une structure et des mots-clés explicites, pensés pour la description de composants d'infrastructure, ce qui le rend particulièrement intuitif, comme on peut le voir encore une fois dans le bloc de variable suivant :
variable "region" {
description = "Région de déploiement"
type = string
default = "canadaeast"
}
Comme vous pouvez le constater, les accolades {} encadrent le contenu d’un bloc et en délimitent les propriétés internes. Elles sont omniprésentes dans les fichiers Terraform et leur usage est obligatoire, contrairement à d'autres langages de configuration plus souples.
Le HCL permet également de manipuler des listes (semblables à des tableaux) et des objets (ou dictionnaires). Ces structures sont très utiles pour regrouper plusieurs valeurs sous une seule variable ou pour organiser des informations complexes :
# Liste de chaînes de caractères
variable "zones" {
type = list(string)
default = ["canadacentral", "canadaeast"]
}
# Objet (map)
variable "tags" {
type = map(string)
default = {
environment = "production"
owner = "devops"
}
}
Le dernier bloc déclare une variable nommée tags de type map, c’est-à-dire un objet contenant des paires clé-valeur. Dans cet exemple, la variable est initialisée avec deux étiquettes : environment associée à « production » et owner associée à « devops ». Ce type de structure est souvent utilisé pour ajouter des métadonnées aux ressources déployées sur une plateforme cloud.
Enfin, le mécanisme d’interpolation constitue un élément syntaxique important dans le HCL. Il permet d’insérer dynamiquement des variables dans des chaînes de caractères ou d’utiliser des références à d’autres éléments de configuration. Ce procédé permet de rendre les fichiers .tf plus dynamiques et adaptés à des contextes différents :
# Déclaration de la variable dans variables.tf
variable "region" {
default = "canadacentral"
}
# Réutilisation dans main.tf
resource "azurerm_resource_group" "example" {
name = "rg-${var.region}"
location = var.region
}
Dans cet exemple, la variable « region » est utilisée à la fois dans le nom du groupe de ressources (via interpolation) et comme valeur directe pour le paramètre « location ». Cette pratique permet non seulement de réduire les répétitions et d’améliorer la lisibilité du code, mais aussi de favoriser la portabilité des configurations. Il devient ainsi plus simple d’adapter un déploiement à une autre région ou à un autre environnement puisqu'il suffit simplement de modifier la valeur d’une variable.
Maintenant que nous connaissons les bases du langage HCL et que nous avons donné un aperçu des variables, nous pouvons passer à l’installation de Terraform sur notre poste de travail.
