Aller au contenu
Développement medium
🔐 Alerte sécurité — Incident supply chain Trivy : lire mon analyse de l'attaque

Découvrir HCL : la syntaxe de configuration de HashiCorp

5 min de lecture

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.

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.

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.

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.

Le plus utile est de choisir la page suivante selon votre besoin réel plutôt que de tout lire d’un bloc.

Le langage reste le même, mais les cas d’usage changent.

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.

  • 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.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn