JSON / YAML → Terraform HCL
Ingeniería de infraestructura Terraform HCL

Generador de variables y locals de Terraform HCL desde JSON / YAML

Convierta cargas útiles JSON y YAML en restricciones de tipo de variables Terraform HCL (type = object({...})), valores predeterminados, bloques locals y definiciones terraform.tfvars.

Cero transmisión al servidor
Terraform 1.3+ optional()
Preajustes:
Carga útil de entrada (JSON / YAML)yaml
variable "app_config" {
  description = "Auto-generated Terraform variable constraint for app_config"
  type = object({
    cidr_block           = string
    enable_dns_hostnames = bool
    enable_dns_support   = bool
    max_azs              = number
    nat_gateways         = list(string)
    subnets              = list(object({
      az             = string
      cidr           = string
      is_public      = bool
      name           = string
      route_table_id = string
    }))
    tags                 = map(string)
    vpc_name             = string
  })
  default = {
    cidr_block           = "10.100.0.0/16"
    enable_dns_hostnames = true
    enable_dns_support   = true
    max_azs              = 3
    nat_gateways         = ["nat-08127394821a", "nat-09823412344b"]
    subnets              = [
      {
        az             = "us-east-1a"
        cidr           = "10.100.1.0/24"
        is_public      = true
        name           = "public-1a"
        route_table_id = "rtb-01a9b2c3d4"
      },
      {
        az             = "us-east-1b"
        cidr           = "10.100.2.0/24"
        is_public      = true
        name           = "public-1b"
        route_table_id = "rtb-01a9b2c3d4"
      },
      {
        az             = "us-east-1a"
        cidr           = "10.100.10.0/24"
        is_public      = false
        name           = "private-app-1a"
        route_table_id = "rtb-09f8e7d6c5"
      },
      {
        az             = "us-east-1b"
        cidr           = "10.100.11.0/24"
        is_public      = false
        name           = "private-app-1b"
        route_table_id = "rtb-09f8e7d6c5"
      }
    ]
    tags                 = {
      CostCenter  = "infra-0091"
      Environment = "production"
      ManagedBy   = "terraform"
      Owner       = "cloud-platform-team"
    }
    vpc_name             = "prod-useast1-vpc"
  }
}
Complejidad del esquema
13 Campos inferidosProfundidad 2
Atributos opcionales
0 Opcionales detectadosv1.3+ Activado
Dialectos de exportación
4 Formatos de salida.tf / .tfvars / .json

Síntesis AST 100% del lado del cliente

Todo el análisis sintáctico de JSON y YAML, el recorrido del árbol AST y la síntesis de tipos de Terraform HCL se ejecutan localmente en la memoria del navegador sin peticiones de red ni telemetría.

Conformidad con Terraform 1.3+ y opcionales

Detecta automáticamente campos omitidos o anulables y los envuelve en la sintaxis estándar optional(type, default), evitando errores de tipo en tiempo de ejecución durante terraform plan.

Exportación de infraestructura multidialecto

Exporta sin problemas restricciones de tipos para variables.tf, definiciones de valores para terraform.tfvars, bloques de configuración para locals.tf y archivos tfvars.json listos para producción.

Referencia técnica y guía de arquitectura

Guía de Desarrollo: Generador de Variables y Locals de Terraform HCL desde JSON / YAML — Guía de referencia

Convierta cargas útiles JSON y YAML en restricciones de tipo de variables Terraform HCL (type = object({...})), valores predeterminados, bloques locals y definiciones terraform.tfvars.

Parámetros clave y controles

source_formatstring

Especifica el formato del analizador de entrada ('json' o 'yaml').

Por defecto: "json"
target_modestring

Determina la estructura HCL resultante: 'variable' (con restricción de tipo y default), 'locals' (expresión computada interna) o 'tfvars' (asignación de valores).

Por defecto: "variable"
variable_namestring

Identificador asignado al bloque de variable HCL o clave del bloque locals.

Por defecto: "app_config"
use_optional_attributesboolean

Habilita la sintaxis optional() de Terraform 1.3+ con valores por defecto para atributos omitibles o nulos.

Por defecto: true
indent_spacesnumber

Número de espacios de indentación en los bloques de código HCL generados.

Por defecto: 2

Consejos profesionales y mejores prácticas

En esquemas de objetos anidados

En esquemas de objetos anidados complejos, declare las claves no obligatorias con optional(tipo, valor_defecto). Esto previene errores de referencia nula en tiempo de ejecución y elimina llamadas innecesarias a coalesce().

Las listas JSON homogéneas se mapean

Las listas JSON homogéneas se mapean limpiamente a list(string). Si la lista combina tipos dispares, use tuple([tipo1, tipo2]) en lugar de retroceder a list(any), garantizando validación estricta de tipos.

Si su pipeline de despliegue produce

Si su pipeline de despliegue produce configuraciones dinámicas en JSON, guárdelas directamente como terraform.auto.tfvars.json. Terraform carga variables en JSON de forma nativa sin requerir sintaxis HCL intermedia.

En HCL

En HCL, los identificadores sin comillas que contienen guiones se interpretan como restas aritméticas. Si sus claves contienen guiones (frecuente en etiquetas de AWS o K8s), use comillas dobles: "service-name" = string.

Errores comunes y solución de problemas

Error: Invalid attribute name provocado por guiones en identificadores HCL

Los identificadores con guiones deben entrecomillarse obligatoriamente. Ajuste la definición a "mi-atributo" = object({...}) para evitar errores de sintaxis en el analizador de HCL.

Error de discrepancia de tipo al enviar valores null a atributos no nulos

Los atributos de objetos en Terraform no aceptan null de forma predeterminada. Habilite el modificador optional en el esquema: key = optional(string), o defina nullable = true en el bloque de variable.

Fallo de análisis por indentación inválida en bloques multilínea YAML

Verifique que los escalares multilínea (| o >) mantengan sangría uniforme de 2 espacios y no contengan caracteres de tabulación (\t), prohibidos por el estándar YAML.

Preguntas frecuentes (FAQ)

¿Cómo deduce este generador los tipos HCL de Terraform a partir de JSON/YAML?▼

Las cadenas se convierten en string, números en number y booleanos en bool. Listas homogéneas pasan a list(tipo), listas heterogéneas a tuple([...]), mapas clave-valor uniformes a map(tipo) y estructuras complejas a bloques tipados object({...}).

¿Cuál es la diferencia entre generar un bloque variable y un bloque locals?▼

Un bloque variable expone una interfaz pública con restricciones de tipo y valores predeterminados para recibir parámetros externos. Un bloque locals almacena expresiones internas inmutables que no se pueden modificar externamente.

¿Por qué es preferible usar type = object({...}) en lugar de type = any?▼

El tipo any omite la comprobación estática durante terraform validate, trasladando posibles fallos a la etapa de apply. El esquema explícito de objeto previene errores y habilita autocompletado en el IDE.

¿Se puede usar el código HCL generado directamente en Terraform Cloud o Terragrunt?▼

Sí. Las declaraciones de variables encajan directamente en variables.tf, y las salidas de valores pueden integrarse en terraform.tfvars o en los bloques inputs de terragrunt.hcl.

Herramientas y utilidades relacionadas

Todas las herramientas →
Guía de Desarrollo: Conversor de OpenAPI / Swagger a GraphQL SDLDesarrollo

Convierte endpoints REST, cuerpos de solicitud y esquemas JSON de OpenAPI 3.0/3.1 y Swagger 2.0 en tipos, consultas, mutaciones y definiciones de entrada de GraphQL SDL.

Abrir herramienta→
Guía de desarrollo del generador de esquemas TypeBox TypeScript desde DDL SQLDesarrollo

Convierta sentencias SQL CREATE TABLE en esquemas de validación en tiempo de ejecución de @sinclair/typebox utilizando Type.Object, Type.String, Type.Number y Type.Optional.

Abrir herramienta→
Guía para Desarrolladores del Generador de Código cURL a Rust (reqwest y tokio)Desarrollo

Transforma comandos cURL en solicitudes HTTP asíncronas e idiomáticas en Rust utilizando reqwest, serde_json, encabezados personalizados y el runtime de Tokio.

Abrir herramienta→
Guía de desarrollo del generador de código cURL a Ruby (Net::HTTP y Faraday)Desarrollo

Convierte comandos cURL en código Ruby limpio e idiomático utilizando Net::HTTP, URI, Faraday y gestión nativa de JSON.

Abrir herramienta→
Generador de NetworkPolicy de K8S Referencia TécnicaDesarrollo

Guía técnica para generar manifiestos declarativos de NetworkPolicy en Kubernetes, aislamiento zero-trust de pods, reglas de ingress/egress, bloques CIDR y puertos múltiples.

Abrir herramienta→
Guía para Desarrolladores del Generador YAML de Kubernetes RBAC Role y ClusterRoleBindingDesarrollo

Diseñe manifiestos de Kubernetes RBAC para Role, ClusterRole, RoleBinding y ClusterRoleBinding con grupos de API, verbos de recursos y cuentas de servicio.

Abrir herramienta→