Saltar al contenido
Aback Tools Logo

¿Qué son HCL y HOCON? Lenguajes de configuración explicados

HCL y HOCON explicados: HCL impulsa Terraform, Packer y Vault; HOCON impulsa Akka y Play. Compara sintaxis, sustituciones, compatibilidad con JSON y cuándo usar cada uno.

DH
Tutorials & How-Tos13 min de lectura2,750 palabras

HCL y HOCON son dos lenguajes de configuración que encontrarás en el desarrollo de infraestructura y de aplicaciones: HCL en el ecosistema HashiCorp (Terraform, Packer, Vault) y HOCON en el ecosistema de la JVM (Akka, Play Framework, herramientas de Lightbend). Los dos se crearon para resolver el mismo problema (que JSON es demasiado verboso y poco legible para configuraciones complejas), pero adoptan enfoques distintos y no son intercambiables. Esta guía explica ambos formatos desde cero: cómo se ven, dónde se usan, cómo se comparan y cuándo elegir cada uno.

2014Primera versión de HCLDe HashiCorp para Terraform
2011Primera versión de HOCONDe Typesafe para Akka
4+Herramientas clave usan HCLTerraform, Packer, Vault, Consul

¿Qué es un archivo HCL?

HCL significa HashiCorp Configuration Language. Es un lenguaje de configuración de dominio específico creado por HashiCorp en 2014, inicialmente para dar soporte a Terraform. Los archivos HCL usan la extensión `.hcl` (o `.tf` específicamente para Terraform) y están diseñados para ser legibles por humanos, analizables por máquinas y compatibles con JSON: todo documento JSON válido también es HCL válido.

HCL no es un lenguaje de programación. No puede hacer cálculos, definir funciones ni controlar el flujo del programa como Python o JavaScript. Es un lenguaje de configuración declarativo: describes el estado deseado de la infraestructura y la herramienta que lee el HCL (Terraform, Packer, Vault, Consul, Nomad) decide cómo alcanzarlo. Esta restricción es intencionada: hace que las configuraciones HCL sean predecibles y auditables.

Fundamentos de la sintaxis HCL

HCL usa una estructura de bloques con atributos, bloques anidados y expresiones. Los atributos son pares clave-valor; los bloques agrupan atributos relacionados y pueden anidarse. Los comentarios usan `#` o `//` para una línea y `/* */` para varias.

Estructura básica de HCL
hcl
# Comentario de una línea
resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t3.micro"

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

  # Bloque anidado
  root_block_device {
    volume_size = 20
    encrypted   = true
  }
}

Dónde se usa HCL

  • Terraform: el principal consumidor de HCL; cada archivo `.tf` es HCL que describe infraestructura en la nube y local.
  • Packer: HCL2 (la versión 2 del lenguaje) se usa para definir compilaciones de imágenes de máquina para AMI de AWS, imágenes de GCP y otras.
  • Vault: HCL se usa en archivos de políticas que definen reglas de control de acceso en HashiCorp Vault.
  • Consul: los archivos de configuración de la malla de servicios, las comprobaciones de estado y las definiciones de servicio usan HCL.
  • Nomad: las especificaciones de trabajos de orquestación de cargas se escriben en HCL.

Note

HCL tiene dos versiones: HCL1 (original, usada en el primer Terraform) y HCL2 (publicada en 2019, usada por Terraform 0.12+). HCL2 introdujo evaluación real de expresiones, expresiones for, bloques dinámicos y una sintaxis más estricta. Si encuentras código antiguo de Terraform que no usa `=` de forma consistente para asignar atributos, probablemente sea HCL1. Todas las herramientas modernas de HashiCorp usan HCL2.

¿Qué es HOCON?

HOCON significa Human-Optimized Config Object Notation. Lo creó Typesafe (hoy Lightbend) en 2011 como formato de configuración de la librería Typesafe Config, que impulsa Akka, Play Framework, Lagom y otros frameworks basados en la JVM. Los archivos HOCON usan la extensión `.conf` y son un superconjunto estricto de JSON: todo archivo JSON válido es HOCON válido.

HOCON está pensado para la configuración en tiempo de ejecución de aplicaciones, no para definir infraestructura. Su función destacada son las sustituciones: la capacidad de referenciar otros valores de configuración dentro del mismo archivo mediante la sintaxis de sustitución, referenciando por ruta otros valores de configuración o variables de entorno. Esto hace que HOCON sea especialmente adecuado para configuración por capas: un archivo base puede definir valores por defecto y un archivo específico por entorno puede sobrescribir valores concretos, con sustituciones que toman datos de variables de entorno u otras fuentes.

Fundamentos de la sintaxis HOCON

Estructura básica de HOCON
hocon
# Configuración de la aplicación
app {
  name = "my-service"
  version = "1.0.0"

  server {
    host = "0.0.0.0"
    port = 8080
    # Sustitución desde una variable de entorno
    port = ${?APP_PORT}
  }

  database {
    url = "jdbc:postgresql://localhost:5432/mydb"
    # Sustitución desde otro valor de configuración
    connection-pool = ${app.server.port}
  }
}

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

Funciones de HOCON que van más allá de JSON

  • Comentarios: comentarios de una línea con `#` y `//`; JSON no admite comentarios.
  • Sustituciones: `${path.to.value}` referencia otras claves; `${?ENV_VAR}` no falla si la variable no está definida.
  • Directivas include: include "other.conf" fusiona archivos de configuración externos al analizar.
  • Fusión de objetos: las claves duplicadas fusionan sus valores en vez de sobrescribirlos; permite configuración por capas.
  • Flexibilidad clave-valor: admite key = value, key : value y key value (separado por espacio) de forma equivalente.
  • Cadenas sin comillas: los valores de cadena simples no necesitan comillas salvo que contengan caracteres especiales.

Tip

La sintaxis de sustitución de HOCON es la función más potente para despliegues en producción. Definir port con una sustitución que referencia APP_PORT y un valor por defecto de 8080 encima hace que la aplicación use el puerto 8080 en desarrollo y lo que valga APP_PORT en producción, sin cambiar nada en el código.

HCL vs HOCON: diferencias clave

HCL y HOCON resuelven problemas parecidos desde ángulos distintos. Ambos son más legibles que JSON para configuraciones complejas, ambos admiten comentarios y ambos tienen una capa de compatibilidad con JSON. Pero sus objetivos de diseño, sus casos de uso principales y sus integraciones de ecosistema son tan distintos que rara vez eliges entre ellos: la herramienta que usas decide por ti.

HCL describe qué infraestructura debe existir. HOCON describe cómo debe comportarse una aplicación. La diferencia de propósito moldea cada decisión de diseño en ambos lenguajes.

- Filosofías de diseño de HCL y HOCON
AspectoHCLHOCON
Creado porHashiCorp (2014)Typesafe/Lightbend (2011)
Extensión de archivo.hcl, .tf, .pkr.hcl.conf, .json (subconjunto JSON)
Uso principalInfraestructura como códigoConfiguración de aplicación en ejecución
EcosistemaTerraform, Packer, VaultAkka, Play, Lagom, Spark
Compatible con JSON✓ JSON es HCL válido✓ JSON es HOCON válido
Comentarios✓ # y // y /* */✓ # y //
Sustituciones✗ Usa variables de otra forma✓ ${path} y ${?ENV_VAR}
Incluir archivos✗ Usa módulos en su lugar✓ include "file.conf"
Fusión de objetos✗ Los bloques están ordenados✓ Las claves duplicadas se fusionan
Expresiones y lógica✓ Expresiones, bucles for✗ Solo valores declarativos
Estructura de bloques✓ Bloques con nombre (resource "")✗ Solo objetos anidados

La diferencia conceptual clave

HCL es imperativo en cuanto a la estructura: los bloques tienen tipos y etiquetas (`resource "aws_instance" "web"`) que llevan un significado semántico interpretado por la herramienta. Estás declarando entidades de un tipo concreto con ciertas propiedades. HOCON es puramente un formato de datos: define una estructura jerárquica clave-valor que las aplicaciones leen al arrancar. No tiene concepto de bloques con tipo; todo es una clave que apunta a un valor, un objeto o una lista.

Note

No puedes usar HCL donde se espera HOCON ni al contrario. Una aplicación Akka configurada para leer `application.conf` usará el analizador de HOCON/Typesafe Config; si le das un archivo HCL, dará un error de análisis. Del mismo modo, Terraform solo acepta HCL2 (o JSON) en sus archivos de configuración: HOCON no es una entrada válida para Terraform.

Trabajar con archivos HCL en la práctica

Los archivos HCL se editan sobre todo como parte de un proyecto de Terraform, aunque los mismos principios se aplican a Packer, Vault y Nomad. Acertar con el formato y la estructura importa porque las herramientas de HashiCorp validan HCL de forma estricta en la fase plan o validate, y los bloques HCL mal formados producen errores difíciles de rastrear si el archivo no está bien indentado.

1

Formatea tus archivos HCL para mantener la coherencia

El Formateador HCL de Aback Tools formatea y embellece archivos HCL con sangría de 2 espacios, espaciado coherente de atributos y una estructura de bloques limpia. Pega cualquier archivo `.hcl` o `.tf` y obtén una salida con formato uniforme lista para usar con Terraform, Packer, Vault, Consul o Nomad, todo en tu navegador.

2

Convierte HCL a YAML cuando lo necesites

Cuando un sistema de CI, una herramienta de documentación o un procesador de pipeline necesita la configuración HCL en formato YAML, el Conversor de HCL a YAML se encarga de la traducción estructural. Esto es habitual al extraer definiciones de variables de Terraform para usarlas en playbooks de Ansible o en config maps de Kubernetes.

3

Valida los nombres de recursos HCL en Terraform

Los nombres de recursos HCL en Terraform deben seguir convenciones coherentes en todo el equipo para que el código sea revisable. El Verificador de convenciones de nombres de recursos de Terraform, en `/tools/data/validators/terraform-resource-naming-convention-checker`, valida que los nombres de tus recursos, variables y módulos sigan el estilo elegido antes de ejecutar `terraform plan`.

Formateador HCL

Formatea y embellece cualquier archivo HCL o de Terraform con sangría de 2 espacios, espaciado coherente de atributos y una estructura de bloques limpia, en tu navegador.

Open tool

Trabajar con archivos HOCON en la práctica

Los archivos de configuración HOCON en proyectos JVM suelen estar en `src/main/resources/application.conf`. Las aplicaciones Akka usan HOCON para la configuración del sistema de actores, los ajustes de dispatcher y la configuración de extensiones. Play Framework lo usa para rutas, conexiones de base de datos y ajustes de la aplicación. El formato es permisivo (cadenas sin comillas, operadores de asignación flexibles, comentarios), pero un formato sensible al espaciado hace que los archivos sean más fáciles de leer y mantener.

Formatear archivos HOCON

El Formateador HOCON de Aback Tools formatea archivos de configuración HOCON con sangría coherente de 4 espacios, espaciado correcto de clave-valor, manejo limpio de sustituciones y las convenciones de Typesafe Config. Resulta especialmente útil al editar archivos grandes de Akka o Play que han acumulado formatos incoherentes por culpa de varios colaboradores.

Convertir HOCON a YAML

Cuando una herramienta de tu pipeline espera YAML pero la configuración de tu aplicación es HOCON, el Conversor de HOCON a YAML traduce la estructura clave-valor de HOCON a su equivalente en YAML. Ten en cuenta que las funciones propias de HOCON (sustituciones, directivas include y claves fusionadas) se resuelven antes de la conversión, así que la salida YAML refleja la configuración final fusionada y no la sintaxis cruda de la plantilla HOCON.

Warning

Las sustituciones y directivas include de HOCON las resuelve la librería Typesafe Config al analizar, no de forma estática en el archivo. Cuando conviertes HOCON a YAML con una herramienta, las sustituciones que referencian variables de entorno aparecerán como su valor literal o se omitirán si la variable no está definida en el entorno de conversión. Verifica la salida antes de usarla en producción.

Formateador HOCON

Formatea archivos de configuración HOCON con sangría coherente de 4 espacios, manejo correcto de sustituciones y convenciones de Typesafe Config, todo en tu navegador.

Open tool

HCL y HOCON junto a otros formatos de configuración

HCL y HOCON conviven con un panorama más amplio de formatos de configuración. Elegir el adecuado rara vez es una decisión libre: las herramientas que usas dictan el formato. Pero entender dónde encaja cada uno ayuda a razonar sobre la portabilidad de la configuración y las ventajas e inconvenientes de cada herramienta.

Comparativa de los principales formatos de configuración

FormatoLegibleComentariosIdeal para
JSON✗ Verboso✗ NingunoAPIs, intercambio de datos
YAML✓ Mucho✓ #K8s, CI/CD, configuración general
TOML✓ Bueno✓ #Configuración de apps, Rust, herramientas Python
INI✓ Sencillo✓ # ;Clave-valor simple, aplicaciones heredadas
HCL✓ Bueno✓ # //Infraestructura como código
HOCON✓ Bueno✓ # //Configuración de apps JVM, Akka, Play

HCL y YAML juntos en flujos de trabajo con Terraform

En la práctica, un proyecto de Terraform usa HCL para todas las definiciones de infraestructura, mientras que el pipeline de CI/CD que ejecuta Terraform suele configurarse en YAML (GitHub Actions, GitLab CI, CircleCI). Conviven sin conflicto: HCL es la entrada de Terraform y YAML la del pipeline. Si trabajas con ambos, se aplica la misma disciplina de formato. Para errores de YAML en tus archivos de CI, el flujo de Cómo detectar y corregir errores de YAML se aplica directamente.

HOCON, TOML y YAML para la configuración de aplicaciones

Para aplicaciones que no son JVM, TOML y YAML son opciones más comunes que HOCON. TOML es el estándar de Rust (Cargo.toml), del empaquetado de Python (pyproject.toml) y de los sitios estáticos con Hugo. YAML domina Kubernetes, Ansible, Docker Compose y la mayoría de las herramientas cloud native. HOCON es la elección correcta específicamente cuando tu entorno de ejecución es un framework JVM que incluye Typesafe Config: obtienes las funciones de HOCON gratis, y pelearte con el framework para usar otro formato crea más problemas de los que resuelve.


Artículos relacionados sobre formatos

Si estás evaluando formatos de configuración para un proyecto nuevo, los artículos complementarios de esta serie cubren las alternativas más cercanas. Cómo crear un archivo INI cubre el formato de configuración más simple. Cómo comentar en YAML correctamente trata los detalles de la sintaxis de YAML. Y ¿Qué comprueba realmente terraform validate? cubre cómo aparecen los errores de HCL en un flujo de trabajo con Terraform.

Tip

Si estás escribiendo una librería o herramienta nueva que necesita un formato de configuración, considera TOML antes que HCL o HOCON. TOML tiene amplio soporte de analizadores en todos los lenguajes importantes, una especificación sencilla y ningún acoplamiento a un ecosistema. Reserva HCL para herramientas de HashiCorp y HOCON para integraciones JVM/Typesafe Config donde el framework espera ese formato.

Key takeaways

  • HCL (HashiCorp Configuration Language) es un formato declarativo de infraestructura como código, usado por Terraform, Packer, Vault, Consul y Nomad. La versión actual es HCL2.
  • HOCON (Human-Optimized Config Object Notation) es un superconjunto de JSON para la configuración en ejecución de aplicaciones JVM, usado por Akka, Play Framework y herramientas de Lightbend.
  • Ambos formatos admiten comentarios y son compatibles con JSON, pero no son intercambiables: la herramienta que usas determina qué formato emplear.
  • La función clave de HCL son los bloques con tipo y nombre (`resource "aws_instance" "web"`); la de HOCON son las sustituciones de variables (`${?ENV_VAR}`) y la fusión de objetos.
  • Usa el Formateador HCL para un formato HCL coherente y el Formateador HOCON para HOCON: ambos funcionan en tu navegador sin subir archivos.
  • Para proyectos que no sean JVM ni de HashiCorp, TOML o YAML suelen ser mejores opciones que HCL o HOCON por su mayor soporte de analizadores y su menor acoplamiento al ecosistema.

Preguntas frecuentes

Un archivo HCL es un archivo de configuración escrito en HashiCorp Configuration Language, un formato declarativo creado por HashiCorp en 2014. Los archivos HCL usan la extensión .hcl (o .tf para Terraform, .pkr.hcl para Packer) y describen el estado deseado de la infraestructura mediante bloques con tipo y nombre y asignaciones de atributos. Todo documento JSON válido también es HCL2 válido, lo que facilita la migración. HCL lo usan Terraform, Packer, Vault, Consul y Nomad.

HOCON significa Human-Optimized Config Object Notation. Es un formato de configuración creado por Typesafe (ahora Lightbend) en 2011 como superconjunto de JSON. Los archivos HOCON usan la extensión .conf y admiten comentarios, sustituciones de variables (${?ENV_VAR}), directivas include y fusión de objetos. HOCON es el formato de configuración nativo de Akka, Play Framework, Lagom y otros frameworks de la JVM que usan la librería Typesafe Config.

HCL es para infraestructura como código: usa bloques con tipo y nombre para declarar recursos de infraestructura y lo interpretan las herramientas de HashiCorp. HOCON es para la configuración en tiempo de ejecución de aplicaciones: usa una estructura jerárquica clave-valor con sustituciones y fusión, interpretada por la librería Typesafe Config. Ambos son compatibles con JSON y admiten comentarios, pero no son intercambiables: Terraform espera HCL, Akka espera HOCON y ningún analizador acepta el formato del otro.

No. Kubernetes y GitHub Actions usan analizadores de YAML que esperan sintaxis YAML. HCL usa una sintaxis distinta (bloques con tipo, nombres de atributo sin comillas, notación de listas diferente) que no es YAML válido. Estas herramientas no incluyen soporte de analizador HCL. Del mismo modo, no puedes usar HOCON para manifiestos de Kubernetes. Si necesitas pasar de HCL a una herramienta basada en YAML, usa el Conversor de HCL a YAML para producir una representación YAML de tus datos de configuración.

HCL es el lenguaje de configuración que usa Terraform, pero HCL no es Terraform. HCL es un lenguaje de configuración de propósito general que también usan otras herramientas de HashiCorp: Packer, Vault, Consul y Nomad leen archivos HCL. Terraform es una herramienta de aprovisionamiento de infraestructura que emplea HCL como formato de configuración. Cuando la gente dice «archivos de Terraform» se refiere a archivos .tf escritos en HCL2, pero HCL en sí es una especificación de lenguaje independiente publicada por HashiCorp.

Sí. Todo archivo JSON válido también es HOCON válido: el analizador de HOCON acepta la sintaxis JSON sin modificaciones. HOCON amplía JSON añadiendo comentarios (# y //), comas y comillas opcionales para cadenas simples, asignación clave-valor con = o :, sustituciones (${path}), directivas include y fusión de objetos cuando la misma clave aparece varias veces. Esta compatibilidad con JSON significa que puedes empezar con una configuración JSON y adoptar poco a poco las funciones de HOCON sin reescribir el archivo.

Para archivos HCL, usa el Formateador HCL de Aback Tools en /tools/data/formatters/hcl-formatter: aplica sangría de 2 espacios, espaciado coherente de atributos y una estructura de bloques limpia. Para archivos de Terraform en concreto, el comando oficial `terraform fmt` también formatea archivos .tf. Para archivos HOCON, usa el Formateador HOCON en /tools/data/formatters/hocon-formatter para una sangría coherente de 4 espacios y las convenciones de Typesafe Config. Ambas herramientas funcionan en tu navegador sin subir archivos.

Usa HOCON cuando construyas una aplicación JVM con un framework que incluye Typesafe Config (Akka, Play, Lagom): obtienes soporte de HOCON gratis y la documentación del framework lo da por supuesto. Usa YAML cuando construyas una aplicación que no sea JVM, la contenerices con Docker/Kubernetes o uses un framework como Spring Boot con soporte nativo de YAML. Mezclar formatos en un proyecto crea complejidad innecesaria: alinea el formato de configuración con lo que tu framework de ejecución espera de forma nativa.

ShareXLinkedIn