Aller au contenu
Aback Tools Logo

Que sont HCL et HOCON ? Les langages de configuration expliqués

HCL et HOCON expliqués : HCL alimente Terraform, Packer et Vault, HOCON alimente Akka et Play. Comparez syntaxe, substitutions, compatibilité JSON et cas d'usage.

DH
Tutorials & How-Tos13 min de lecture2,750 mots

HCL et HOCON sont deux langages de configuration que vous rencontrerez dans le développement d'infrastructure et d'applications : HCL dans l'écosystème HashiCorp (Terraform, Packer, Vault) et HOCON dans l'écosystème JVM (Akka, Play Framework, outils Lightbend). Les deux ont été créés pour résoudre le même problème (JSON est trop verbeux et illisible pour une configuration complexe), mais ils adoptent des approches différentes et ne sont pas interchangeables. Ce guide explique les deux formats depuis le début : à quoi ils ressemblent, où ils sont utilisés, comment ils se comparent et quand choisir l'un ou l'autre.

2014Première version de HCLPar HashiCorp pour Terraform
2011Première version de HOCONPar Typesafe pour Akka
4+Outils majeurs utilisent HCLTerraform, Packer, Vault, Consul

Qu'est-ce qu'un fichier HCL ?

HCL signifie HashiCorp Configuration Language. C'est un langage de configuration dédié à un domaine, créé par HashiCorp en 2014, d'abord pour prendre en charge Terraform. Les fichiers HCL utilisent l'extension `.hcl` (ou `.tf` pour Terraform) et sont conçus pour être lisibles par l'humain, analysables par machine et compatibles JSON : tout document JSON valide est aussi du HCL valide.

HCL n'est pas un langage de programmation. Il ne peut pas effectuer de calculs, définir des fonctions ou contrôler le flux d'exécution comme Python ou JavaScript. C'est un langage de configuration déclaratif : vous décrivez l'état souhaité de l'infrastructure, et l'outil qui lit le HCL (Terraform, Packer, Vault, Consul, Nomad) détermine comment y parvenir. Cette contrainte est volontaire : elle rend les configurations HCL prévisibles et auditables.

Les bases de la syntaxe HCL

HCL utilise une structure en blocs avec des attributs, des blocs imbriqués et des expressions. Les attributs sont des paires clé-valeur ; les blocs regroupent des attributs liés et peuvent être imbriqués. Les commentaires utilisent `#` ou `//` sur une ligne et `/* */` sur plusieurs.

Structure HCL de base
hcl
# Commentaire sur une ligne
resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t3.micro"

  tags = {
    Name        = "web-server"
    Environment = "production"
  }

  # Bloc imbriqué
  root_block_device {
    volume_size = 20
    encrypted   = true
  }
}

Où HCL est utilisé

  • Terraform : le principal consommateur de HCL ; chaque fichier `.tf` est du HCL qui décrit de l'infrastructure cloud ou sur site.
  • Packer : HCL2 (la version 2 du langage) sert à définir la construction d'images machine pour les AMI AWS, les images GCP et autres.
  • Vault : HCL est utilisé pour les fichiers de politique qui définissent les règles de contrôle d'accès dans HashiCorp Vault.
  • Consul : les fichiers de configuration du maillage de services, les contrôles de santé et les définitions de service utilisent HCL.
  • Nomad : les spécifications de tâches d'orchestration de charges sont écrites en HCL.

Note

HCL a deux versions : HCL1 (l'originale, utilisée dans les premiers Terraform) et HCL2 (publiée en 2019, utilisée par Terraform 0.12+). HCL2 a introduit une vraie évaluation d'expressions, les expressions for, les blocs dynamiques et une syntaxe plus stricte. Si vous rencontrez du vieux code Terraform qui n'utilise pas `=` de façon cohérente pour affecter les attributs, il s'agit probablement de HCL1. Tous les outils HashiCorp modernes utilisent HCL2.

Qu'est-ce que HOCON ?

HOCON signifie Human-Optimized Config Object Notation. Il a été créé par Typesafe (aujourd'hui Lightbend) en 2011 comme format de configuration de la bibliothèque Typesafe Config, qui alimente Akka, Play Framework, Lagom et d'autres frameworks JVM. Les fichiers HOCON utilisent l'extension `.conf` et sont un surensemble strict de JSON : tout fichier JSON valide est du HOCON valide.

HOCON est conçu pour la configuration d'exécution des applications plutôt que pour la définition d'infrastructure. Sa fonctionnalité phare est la substitution : la possibilité de référencer d'autres valeurs de configuration dans le même fichier grâce à la syntaxe de substitution, en référençant par chemin d'autres valeurs de configuration ou des variables d'environnement. Cela rend HOCON particulièrement adapté à la configuration en couches : un fichier de base définit les valeurs par défaut, un fichier propre à un environnement remplace certaines valeurs, et les substitutions puisent dans les variables d'environnement ou d'autres sources.

Les bases de la syntaxe HOCON

Structure HOCON de base
hocon
# Configuration de l'application
app {
  name = "my-service"
  version = "1.0.0"

  server {
    host = "0.0.0.0"
    port = 8080
    # Substitution depuis une variable d'environnement
    port = ${?APP_PORT}
  }

  database {
    url = "jdbc:postgresql://localhost:5432/mydb"
    # Substitution depuis une autre valeur de configuration
    connection-pool = ${app.server.port}
  }
}

# Listes
allowed-origins = ["https://example.com", "https://api.example.com"]

Les fonctionnalités HOCON au-delà de JSON

  • Commentaires : commentaires sur une ligne avec `#` et `//` ; JSON n'en accepte aucun.
  • Substitutions : `${path.to.value}` référence d'autres clés ; `${?ENV_VAR}` reste silencieux si la variable n'est pas définie.
  • Directives include : include "other.conf" fusionne des fichiers externes au moment de l'analyse.
  • Fusion d'objets : les clés dupliquées fusionnent leurs valeurs au lieu de les écraser ; permet la configuration en couches.
  • Souplesse clé-valeur : accepte indifféremment key = value, key : value et key value (séparé par un espace).
  • Chaînes sans guillemets : les valeurs de chaîne simples n'ont pas besoin de guillemets sauf si elles contiennent des caractères spéciaux.

Tip

La syntaxe de substitution de HOCON est la fonctionnalité la plus puissante pour les déploiements en production. Définir port avec une substitution qui référence APP_PORT et une valeur par défaut de 8080 juste au-dessus permet à l'application d'utiliser le port 8080 en développement et la valeur d'APP_PORT en production, sans changer une ligne de code.

HCL vs HOCON : différences clés

HCL et HOCON résolvent des problèmes proches sous des angles différents. Les deux sont plus lisibles que JSON pour des configurations complexes, les deux acceptent les commentaires et les deux disposent d'une couche de compatibilité JSON. Mais leurs objectifs de conception, leurs cas d'usage principaux et leurs intégrations d'écosystème sont suffisamment distincts pour que vous choisissiez rarement entre eux : l'outil que vous utilisez choisit pour vous.

HCL décrit quelle infrastructure doit exister. HOCON décrit comment une application doit se comporter. Cette différence d'objectif façonne chaque décision de conception dans les deux langages.

- Philosophies de conception de HCL et HOCON
AspectHCLHOCON
Créé parHashiCorp (2014)Typesafe/Lightbend (2011)
Extension de fichier.hcl, .tf, .pkr.hcl.conf, .json (sous-ensemble JSON)
Usage principalInfrastructure as codeConfiguration d'exécution d'application
ÉcosystèmeTerraform, Packer, VaultAkka, Play, Lagom, Spark
Compatible JSON✓ JSON est du HCL valide✓ JSON est du HOCON valide
Commentaires✓ # et // et /* */✓ # et //
Substitutions✗ Utilise des variables autrement✓ ${path} et ${?ENV_VAR}
Inclusion de fichiers✗ Utilise plutôt des modules✓ include "file.conf"
Fusion d'objets✗ Les blocs sont ordonnés✓ Les clés dupliquées fusionnent
Expressions et logique✓ Expressions, boucles for✗ Valeurs déclaratives uniquement
Structure de blocs✓ Blocs nommés (resource "")✗ Objets imbriqués uniquement

La différence conceptuelle essentielle

HCL est impératif quant à la structure : les blocs ont des types et des étiquettes (`resource "aws_instance" "web"`) porteurs de sens, interprétés par l'outil. Vous déclarez des entités d'un certain type avec certaines propriétés. HOCON est purement un format de données : il définit une structure hiérarchique clé-valeur que les applications lisent au démarrage. Il n'a pas de notion de blocs typés ; tout est une clé pointant vers une valeur, un objet ou une liste.

Note

Vous ne pouvez pas utiliser HCL là où HOCON est attendu, ni l'inverse. Une application Akka configurée pour lire `application.conf` utilisera l'analyseur HOCON/Typesafe Config ; lui fournir un fichier HCL produira une erreur d'analyse. De même, Terraform n'accepte que du HCL2 (ou du JSON) pour ses fichiers de configuration : HOCON n'est pas une entrée valide pour Terraform.

Travailler avec les fichiers HCL en pratique

Les fichiers HCL sont le plus souvent modifiés dans le cadre d'un projet Terraform, même si les mêmes principes s'appliquent à Packer, Vault et Nomad. Le formatage et la structure importent car les outils HashiCorp valident HCL de manière stricte au moment de plan ou validate, et des blocs HCL mal formés produisent des erreurs difficiles à tracer si le fichier n'est pas indenté de façon cohérente.

1

Formatez vos fichiers HCL pour plus de cohérence

Le formateur HCL d'Aback Tools formate et embellit les fichiers HCL avec une indentation de 2 espaces, un espacement d'attributs cohérent et une structure de blocs propre. Collez n'importe quel fichier `.hcl` ou `.tf` et obtenez une sortie formatée de manière uniforme, prête à l'emploi avec Terraform, Packer, Vault, Consul ou Nomad, entièrement dans votre navigateur.

2

Convertissez HCL en YAML quand nécessaire

Quand un système de CI, un outil de documentation ou un processeur de pipeline a besoin d'une configuration HCL au format YAML, le convertisseur HCL vers YAML effectue la traduction structurelle. C'est courant lorsqu'on extrait des définitions de variables Terraform pour les utiliser dans des playbooks Ansible ou des config maps Kubernetes.

3

Validez le nommage des ressources HCL Terraform

Les noms de ressources HCL dans Terraform doivent suivre des conventions cohérentes au sein d'une équipe pour que le code reste révisable. Le vérificateur de conventions de nommage des ressources Terraform, à l'adresse `/tools/data/validators/terraform-resource-naming-convention-checker`, valide que vos noms de ressources, variables et modules respectent le style choisi avant d'exécuter `terraform plan`.

Formateur HCL

Formatez et embellissez n'importe quel fichier HCL ou Terraform avec une indentation de 2 espaces, un espacement d'attributs cohérent et une structure de blocs propre, dans votre navigateur.

Open tool

Travailler avec les fichiers HOCON en pratique

Dans les projets JVM, les fichiers de configuration HOCON se trouvent généralement dans `src/main/resources/application.conf`. Les applications Akka utilisent HOCON pour la configuration du système d'acteurs, les réglages de dispatcher et la configuration des extensions. Play Framework l'utilise pour les routes, les connexions aux bases de données et les réglages de l'application. Le format est permissif (chaînes sans guillemets, opérateurs d'affectation souples, commentaires), mais un formatage sensible aux espaces rend les fichiers plus faciles à lire et à maintenir.

Formater les fichiers HOCON

Le formateur HOCON d'Aback Tools formate les fichiers de configuration HOCON avec une indentation cohérente de 4 espaces, un espacement clé-valeur correct, une gestion propre des substitutions et les conventions Typesafe Config. C'est particulièrement utile lorsqu'on modifie de grands fichiers de configuration Akka ou Play dont le formatage est devenu incohérent au fil des contributions.

Convertir HOCON en YAML

Quand un outil de votre pipeline attend du YAML mais que la configuration de votre application est en HOCON, le convertisseur HOCON vers YAML traduit la structure clé-valeur HOCON en équivalent YAML. Notez que les fonctionnalités propres à HOCON (substitutions, directives include et clés fusionnées) sont résolues avant la conversion : la sortie YAML reflète donc la configuration finale fusionnée et non la syntaxe brute du modèle HOCON.

Warning

Les substitutions et directives include de HOCON sont résolues au moment de l'analyse par la bibliothèque Typesafe Config, pas statiquement dans le fichier. Lorsque vous convertissez du HOCON en YAML avec un outil, les substitutions qui référencent des variables d'environnement apparaîtront sous leur valeur littérale ou seront omises si la variable n'est pas définie dans l'environnement de conversion. Vérifiez la sortie avant de l'utiliser en production.

Formateur HOCON

Formatez les fichiers de configuration HOCON avec une indentation cohérente de 4 espaces, une gestion correcte des substitutions et les conventions Typesafe Config, entièrement dans votre navigateur.

Open tool

HCL et HOCON à côté des autres formats de configuration

HCL et HOCON coexistent avec un paysage plus large de formats de configuration. Choisir le bon est rarement une décision libre : les outils que vous utilisez dictent le format. Mais comprendre où chaque format s'inscrit aide à raisonner sur la portabilité de la configuration et les compromis d'outillage.

Comparaison des principaux formats de configuration

FormatLisibleCommentairesIdéal pour
JSON✗ Verbeux✗ AucunAPI, échange de données
YAML✓ Très✓ #K8s, CI/CD, configuration générale
TOML✓ Bon✓ #Config d'app, Rust, outils Python
INI✓ Simple✓ # ;Clé-valeur simple, applications anciennes
HCL✓ Bon✓ # //Infrastructure as code
HOCON✓ Bon✓ # //Config d'app JVM, Akka, Play

HCL et YAML ensemble dans les workflows Terraform

En pratique, un projet Terraform utilise HCL pour toutes les définitions d'infrastructure, tandis que le pipeline CI/CD qui exécute Terraform est souvent configuré en YAML (GitHub Actions, GitLab CI, CircleCI). Les deux coexistent sans conflit : HCL est l'entrée de Terraform, YAML celle du pipeline. Si vous travaillez avec les deux, la même discipline de formatage s'applique. Pour les erreurs YAML dans vos fichiers de CI, la procédure de Comment détecter et corriger les erreurs YAML s'applique directement.

HOCON, TOML et YAML pour la configuration d'application

Pour les applications non JVM, TOML et YAML sont des choix plus courants que HOCON. TOML est le standard de Rust (Cargo.toml), du packaging Python (pyproject.toml) et des sites statiques Hugo. YAML domine Kubernetes, Ansible, Docker Compose et la plupart des outils cloud native. HOCON est le bon choix spécifiquement quand votre environnement d'exécution est un framework JVM livré avec Typesafe Config : vous obtenez les fonctionnalités de HOCON gratuitement, et se battre contre le framework pour utiliser un autre format crée plus de problèmes que cela n'en résout.


Articles liés sur les formats

Si vous évaluez des formats de configuration pour un nouveau projet, les articles complémentaires de cette série couvrent les alternatives les plus proches. Comment créer un fichier INI traite le format de configuration le plus simple. Comment commenter en YAML correctement détaille la syntaxe YAML. Et Que vérifie réellement terraform validate ? explique comment les erreurs HCL apparaissent dans un workflow Terraform.

Tip

Si vous écrivez une nouvelle bibliothèque ou un outil qui a besoin d'un format de configuration, envisagez TOML avant HCL ou HOCON. TOML bénéficie d'un large support d'analyseurs dans tous les langages majeurs, d'une spécification simple et d'aucun couplage à un écosystème. Réservez HCL aux outils HashiCorp et HOCON aux intégrations JVM/Typesafe Config où le framework attend ce format.

Key takeaways

  • HCL (HashiCorp Configuration Language) est un format déclaratif d'infrastructure as code, utilisé par Terraform, Packer, Vault, Consul et Nomad. HCL2 est la version actuelle.
  • HOCON (Human-Optimized Config Object Notation) est un surensemble de JSON pour la configuration d'exécution d'applications JVM, utilisé par Akka, Play Framework et les outils Lightbend.
  • Les deux formats acceptent les commentaires et sont compatibles JSON, mais ils ne sont pas interchangeables : l'outil que vous utilisez détermine le format à employer.
  • La fonctionnalité clé de HCL, ce sont les blocs typés et nommés (`resource "aws_instance" "web"`) ; celle de HOCON, ce sont les substitutions de variables (`${?ENV_VAR}`) et la fusion d'objets.
  • Utilisez le formateur HCL pour un formatage HCL cohérent et le formateur HOCON pour HOCON : les deux tournent dans votre navigateur, sans téléversement.
  • Pour les projets non JVM et non HashiCorp, TOML ou YAML sont généralement de meilleurs choix que HCL ou HOCON grâce à un support d'analyseurs plus large et à l'absence de couplage d'écosystème.

Questions fréquentes

Un fichier HCL est un fichier de configuration écrit en HashiCorp Configuration Language, un format déclaratif créé par HashiCorp en 2014. Les fichiers HCL utilisent l'extension .hcl (ou .tf pour Terraform, .pkr.hcl pour Packer) et décrivent l'état souhaité de l'infrastructure à l'aide de blocs typés et nommés et d'affectations d'attributs. Tout document JSON valide est également du HCL2 valide, ce qui facilite la migration. HCL est utilisé par Terraform, Packer, Vault, Consul et Nomad.

HOCON signifie Human-Optimized Config Object Notation. C'est un format de configuration créé par Typesafe (aujourd'hui Lightbend) en 2011 comme surensemble de JSON. Les fichiers HOCON utilisent l'extension .conf et prennent en charge les commentaires, les substitutions de variables (${?ENV_VAR}), les directives include et la fusion d'objets. HOCON est le format de configuration natif d'Akka, Play Framework, Lagom et d'autres frameworks JVM qui utilisent la bibliothèque Typesafe Config.

HCL sert à l'infrastructure as code : il utilise des blocs typés et nommés pour déclarer des ressources d'infrastructure et il est interprété par les outils HashiCorp. HOCON sert à la configuration d'exécution des applications : il repose sur une structure hiérarchique clé-valeur avec substitutions et fusion, interprétée par la bibliothèque Typesafe Config. Les deux sont compatibles JSON et acceptent les commentaires, mais ils ne sont pas interchangeables : Terraform attend du HCL, Akka attend du HOCON, et aucun analyseur n'accepte le format de l'autre.

Non. Kubernetes et GitHub Actions utilisent des analyseurs YAML qui attendent de la syntaxe YAML. HCL a une syntaxe différente (blocs typés, noms d'attributs sans guillemets, notation de listes différente) qui n'est pas du YAML valide. Ces outils n'embarquent aucun analyseur HCL. De même, vous ne pouvez pas utiliser HOCON pour les manifestes Kubernetes. Si vous devez faire le pont entre HCL et un outil basé sur YAML, utilisez le convertisseur HCL vers YAML pour produire une représentation YAML de vos données de configuration.

HCL est le langage de configuration utilisé par Terraform, mais HCL n'est pas Terraform. HCL est un langage de configuration généraliste que d'autres outils HashiCorp utilisent aussi : Packer, Vault, Consul et Nomad lisent tous des fichiers HCL. Terraform est un outil de provisionnement d'infrastructure qui se trouve utiliser HCL comme format de configuration. Quand on parle de « fichiers Terraform », on parle de fichiers .tf écrits en HCL2, mais HCL est en soi une spécification de langage indépendante publiée par HashiCorp.

Oui. Tout fichier JSON valide est aussi du HOCON valide : l'analyseur HOCON accepte la syntaxe JSON sans modification. HOCON étend JSON en ajoutant des commentaires (# et //), des virgules et guillemets facultatifs pour les chaînes simples, l'affectation clé-valeur avec = ou :, les substitutions (${path}), les directives include et la fusion d'objets lorsque la même clé apparaît plusieurs fois. Cette compatibilité JSON signifie que vous pouvez partir d'une configuration JSON et adopter progressivement les fonctionnalités HOCON sans réécrire le fichier.

Pour les fichiers HCL, utilisez le formateur HCL d'Aback Tools à l'adresse /tools/data/formatters/hcl-formatter : il applique une indentation de 2 espaces, un espacement d'attributs cohérent et une structure de blocs propre. Pour les fichiers Terraform spécifiquement, la commande officielle `terraform fmt` formate aussi les fichiers .tf. Pour les fichiers HOCON, utilisez le formateur HOCON à /tools/data/formatters/hocon-formatter pour une indentation cohérente de 4 espaces et les conventions Typesafe Config. Les deux outils fonctionnent dans votre navigateur, sans téléversement.

Utilisez HOCON lorsque vous développez une application JVM avec un framework qui embarque Typesafe Config (Akka, Play, Lagom) : vous obtenez la prise en charge de HOCON gratuitement et la documentation du framework le suppose. Utilisez YAML pour une application non JVM, pour conteneuriser avec Docker/Kubernetes, ou avec un framework comme Spring Boot qui prend nativement YAML en charge. Mélanger les formats dans un projet crée une complexité d'outillage inutile : alignez votre format de configuration sur ce que votre framework d'exécution attend nativement.

ShareXLinkedIn