HCL est le langage de configuration utilisé par HashiCorp pour décrire des blocs, des attributs et des valeurs lisibles par un humain. Si vous lisez du code Terraform ou des templates Packer, vous lisez déjà du HCL. Le bon réflexe consiste donc à séparer deux sujets : la syntaxe générique du langage, puis la signification métier que Terraform, Packer ou un autre outil attribue à ces blocs.
Cette page sert de point d’entrée. Elle vous aide à comprendre ce qu’est HCL, ce qu’il ne faut pas lui faire dire, et quels guides lire ensuite selon que vous avez besoin de revoir la syntaxe, les types ou l’usage concret dans Terraform.
Pourquoi apprendre HCL
Section intitulée « Pourquoi apprendre HCL »Quand on débute avec Terraform, on attribue souvent toutes les difficultés au produit lui-même, alors qu’une partie du blocage vient simplement de la lecture du langage. Si vous ne distinguez pas un bloc, un attribut, un objet, une liste ou une interpolation, chaque fichier .tf paraît plus opaque qu’il ne l’est réellement.
Apprendre HCL n’a donc pas pour but de devenir spécialiste d’une spécification abstraite. Le but est plus concret : lire un fichier sans confondre la structure du langage avec la logique de l’outil qui l’interprète.
Où vous croiserez HCL
Section intitulée « Où vous croiserez HCL »HCL apparaît surtout dans les outils HashiCorp, mais pas uniquement :
- dans Terraform pour décrire infrastructure, variables, modules et outputs ;
- dans Packer pour déclarer des templates et des builders ;
- dans d’autres outils de l’écosystème HashiCorp, avec un schéma propre à chacun.
Ce point est important : la syntaxe se ressemble, mais les blocs autorisés et leur signification changent selon l’outil.
Ce qu’il faut corriger tout de suite
Section intitulée « Ce qu’il faut corriger tout de suite »Avant d’aller plus loin, voici quatre confusions fréquentes à évacuer :
- HCL accepte les commentaires
#,//et/* ... */, pas seulement#. - Les chaînes s’écrivent avec des guillemets doubles ou un heredoc, pas avec des guillemets simples.
- Une expression n’a pas besoin d’être enveloppée dans
${}sauf si elle est insérée dans une chaîne de caractères. - Un bloc comme
server "web" { ... }n’est pas une map. C’est une structure de bloc avec éventuellement un ou plusieurs labels.
Quel guide lire ensuite
Section intitulée « Quel guide lire ensuite »Le plus utile est de choisir la page suivante selon votre besoin réel plutôt que de tout lire d’un bloc.
HCL dans Terraform et dans Packer
Section intitulée « HCL dans Terraform et dans Packer »Le langage reste le même, mais les cas d’usage changent.
Ce que cette section couvre vraiment
Section intitulée « Ce que cette section couvre vraiment »La section HCL du site sert maintenant à documenter le socle commun :
- la structure des fichiers et des blocs ;
- les valeurs et collections ;
- les expressions, valeurs nommées et fonctions ;
- les pièges de syntaxe qui perturbent ensuite la lecture de Terraform.
En revanche, dès qu’un sujet dépend du comportement de Terraform ou de Packer lui-même, il vaut mieux basculer vers la section dédiée. C’est le cas des providers, des resources, des data sources, des variables Terraform, des meta-arguments, des blocs source et build Packer ou des contraintes de version.
À retenir
Section intitulée « À retenir »- HCL est une syntaxe de configuration, pas un outil d’infrastructure à lui seul.
- Terraform et Packer utilisent HCL, mais chacun ajoute son propre schéma de blocs et ses propres règles.
- Les erreurs de lecture les plus fréquentes portent sur les commentaires, les chaînes, les blocs et l’usage de
${}. - Pour progresser vite, lisez d’abord la syntaxe, les types, les expressions et les fonctions, puis seulement les guides Terraform ou Packer spécialisés.