YAML es un lenguaje de serialización de datos versátil, simple y legible para humanos. Diseñado originalmente a principios de la década de 2000, se utiliza ampliamente para archivos de configuración, intercambio de datos entre lenguajes de programación y aplicaciones que necesitan una forma sencilla de representar estructuras de datos complejas. Este artículo explica los aspectos principales de YAML, incluida su sintaxis, características y casos de uso. Tanto si eres desarrollador como administrador de sistemas o redes, esta guía te ayudará a comprender por qué YAML es esencial para los entornos informáticos modernos.
Por qué no uso "YAML" en mi código
¿Qué es YAML?
YAML es un lenguaje de serialización de datos centrado en ser amigable para los humanos a la vez que proporciona estructuras de datos enriquecidas para los lenguajes de programación. A diferencia de los lenguajes de marcado como XML o formatos de datos como JSON, YAML enfatiza la claridad y la brevedad, lo que facilita su lectura y escritura.
YAML, acrónimo de "YAML Ain't Markup Language" o "YAML no es un lenguaje de marcado", es un lenguaje de serialización de datos legible por humanos, ampliamente utilizado para configurar archivos o intercambiar datos entre diferentes lenguajes de programación. Su sintaxis es sencilla y se basa en la indentación para representar la jerarquía de los datos, similar a lo que sucede con Python.
YAML se desarrolló pensando en la simplicidad y la legibilidad. YAML utiliza una sintaxis clara y minimalista basada en sangrías, pares clave-valor y convenciones intuitivas. Como la legibilidad ocupa un lugar central, YAML es especialmente adecuado para diversas aplicaciones, por ejemplo, para archivos de configuración (config) e intercambio de datos entre distintos sistemas. Su estructura sencilla e intuitiva hace que YAML pueda utilizarse en muchos ámbitos y permite definir y organizar los datos de forma clara y comprensible. YAML admite caracteres Unicode y, por tanto, permite representar una gran variedad de caracteres y símbolos de distintos idiomas y conjuntos de caracteres. La gran adaptabilidad de YAML lo convierte en una herramienta versátil para una amplia gama de aplicaciones.
Sus características clave incluyen:
- Legibilidad humana: YAML utiliza la sangría y una puntuación mínima para representar las estructuras de datos, lo que lo hace intuitivo de leer.
- Independencia del lenguaje: YAML funciona en varios lenguajes de programación, lo que permite un intercambio de datos sin problemas.
- Versatilidad: YAML admite tipos de datos complejos como asignaciones (diccionarios), secuencias (listas) y escalares (cadenas, números, booleanos).
Los desarrolladores utilizan comúnmente YAML en archivos de configuración para aplicaciones y servicios, intercambio de datos entre sistemas y herramientas de administración de infraestructura como Ansible y Kubernetes.

Sintaxis YAML
YAML se basa en la sangría y las notaciones para definir estructuras de datos. A continuación se muestran los elementos fundamentales de la sintaxis de YAML, cada uno explicado con ejemplos.
Hay varios atributos y elementos clave dentro de la sintaxis de YAML. Los diccionarios se representan como mapeos en YAML. Son una colección de pares clave-valor, donde a cada clave se le asigna un valor. La sintaxis YAML se basa en gran medida en la sangría y el número de espacios para representar la estructura de los datos. Los espacios en blanco, no los caracteres de tabulación, que están prohibidos en YAML, se utilizan en YAML para indicar jerarquía y anidamiento.
Sangría y espacios en blanco
La sangría en YAML denota jerarquía y estructura. YAML utiliza espacios (no tabulaciones) para la sangría, y el uso consistente de espacios es esencial para evitar errores de análisis.
yamlparent: child1: value1 child2: value2En este ejemplo, child1 y child2 están anidados bajo parent, lo que indica una relación jerárquica. La sangría muestra que estas claves son hijas de la clave parent, permitiendo que los analizadores YAML comprendan la estructura de los datos.
Escalares
Los escalares representan valores únicos e indivisibles como cadenas, números, booleanos y nulos. Forman los nodos hoja de la estructura de datos YAML y son esenciales para almacenar tipos de datos básicos.
Cadenas
Puedes escribir cadenas de forma simple o entre comillas.
yamlplain_string: Hello Worldsingle_quoted_string: 'Hello\nWorld'double_quoted_string: "Hello\nWorld"En el ejemplo anterior:
- plain_string es una cadena simple sin comillas.
- single_quoted_string usa comillas simples para incluir caracteres especiales literalmente.
- double_quoted_string usa comillas dobles para interpretar \n como un carácter de nueva línea debido a la secuencia de escape.
La mayoría de los escalares en YAML no requieren comillas. Sin embargo, en algunos casos, como cuando se trabaja con cadenas de texto que contienen caracteres especiales que podrían confundirse con la sintaxis YAML, las comillas pueden ser necesarias para evitar confusiones. También pueden ser necesarias si se tiene una cadena compuesta únicamente por «true» que no se desea convertir en booleana.
Números
Escribes números en YAML sin comillas; pueden ser enteros o números de punto flotante.
yamlinteger_value: 123float_value: 3.14En el ejemplo anterior:
- integer_value es un entero.
- float_value es un número de punto flotante.
YAML interpreta estos valores según su formato, permitiendo operaciones matemáticas si son procesados por un lenguaje de programación.
Booleanos
En YAML, representas los booleanos como true o false; los valores no distinguen entre mayúsculas y minúsculas.
yamlis_enabled: Truehas_access: FalseEn el ejemplo anterior:
- is_enabled es igual a true.
- has_access es igual a False.
YAML interpreta ambos valores como tipos booleanos independientemente de su capitalización.
Nulos
Los nulos en YAML significan la ausencia de un valor.
yamlmiddle_name: nullnickname: ~additional_info:En el ejemplo anterior:
- Hemos establecido explícitamente middle_name en null.
- nickname usa ~ como una abreviatura de null.
- additional_info carece de un valor asignado, que YAML interpreta como null.
Comprender cómo representar valores nulos es importante para modelar con precisión los datos que pueden tener campos opcionales o faltantes.
Mappings (Diccionarios)
Las asignaciones/mappings en YAML son colecciones de pares clave-valor, análogos a los diccionarios en Python u objetos en JSON.
yamluser: name: John Doe age: 30 contact: phone: '123-456-7890' email: [email protected]En este ejemplo, user es una asignación que contiene claves como name, age y contact, donde contact es en sí misma una asignación anidada.
Secuencias (Listas)
Las secuencias representan listas ordenadas de elementos. Una secuencia se separa del elemento padre mediante sangría y cada elemento de la lista comienza con un guión (-) seguido de un espacio.
yamlfruits: - apple - banana - cherryAlternativamente, escribe secuencias en un estilo de flujo usando corchetes. Aquí tienes una secuencia de estilo de flujo:
yamlcolors: [red, green, blue]Comentarios
YAML admite comentarios, que se identifican con el símbolo #. Los comentarios mejoran la legibilidad de los archivos YAML al permitirte incluir texto explicativo.
yaml# This is a commentname: John Doe # This is an inline commentAnclas y Referencias
Al usar anclas y alias, YAML te permite reutilizar bloques de datos. Esta característica reduce la redundancia y simplifica las actualizaciones, ya que los cambios en el ancla se reflejan dondequiera que se use el alias.
yamldefaults: &defaults adapter: postgres host: localhostdevelopment: database: myapp_development <<: *defaultstest: database: myapp_test <<: *defaultsEn el ejemplo anterior, &defaults crea un ancla llamada defaults, y *defaults hace referencia a esta ancla en otras asignaciones.
Etiquetas
Las etiquetas en YAML declaran explícitamente el tipo de datos de un nodo.
yamlstring_value: !!str 12345hexadecimal: !!int 0xFFEn el ejemplo anterior, !!str asegura que 12345 se trate como una cadena, no como un número.

Características de YAML
YAML es una herramienta poderosa para la serialización de datos y la gestión de la configuración. Estas son las características clave:
- Legibilidad humana: El diseño de YAML prioriza la facilidad de lectura y escritura por parte de los humanos. La sintaxis es ordenada, utilizando sangría en lugar de llaves o corchetes, lo que facilita la lectura y comprensión, especialmente en archivos de configuración grandes. La sintaxis de YAML se asemeja a las estructuras del lenguaje natural.
- Soporte para estructuras de datos complejas: YAML puede representar estructuras de datos complejas y anidadas, incluyendo combinaciones de asignaciones y secuencias. Esta capacidad permite un modelado detallado de datos del mundo real.
- Independencia del lenguaje: La naturaleza independiente del lenguaje de YAML te permite usarlo en diferentes entornos de programación. La mayoría de los lenguajes de programación tienen bibliotecas para analizar y generar YAML. YAML es neutral en cuanto al lenguaje, por lo que resulta ideal para compartir datos entre distintos lenguajes de programación.
- Extensibilidad y tipos de datos personalizados: YAML admite tipos de datos definidos por el usuario y se puede ampliar para adaptarse a requisitos personalizados. Esta flexibilidad se logra a través de etiquetas y permite la integración de tipos de datos específicos de la aplicación.
- Comentarios y documentación: La inclusión de comentarios directamente en los archivos YAML ayuda en la documentación. Los desarrolladores pueden anotar las configuraciones con explicaciones, lo que es invaluable para el mantenimiento y la colaboración.
- Anclas y referencias: Al usar anclas y alias, YAML te permite reutilizar bloques de datos. Esta característica reduce la redundancia y simplifica las actualizaciones, ya que los cambios en el ancla se reflejan dondequiera que se use el alias.
¿Para qué se utiliza YAML?
A continuación se muestran los principales casos de uso de YAML.
Archivos de configuración
Uno de los usos más comunes de YAML es en archivos de configuración. YAML es una opción ideal para definir la configuración y los parámetros de aplicaciones y servicios. YAML está muy indicado para los archivos de configuración debido a su formato estructurado y legible.
Docker Compose
Docker Compose utiliza archivos YAML para definir aplicaciones Docker de varios contenedores. En estos archivos YAML, los desarrolladores especifican servicios, redes, volúmenes y otras configuraciones necesarias para ejecutar aplicaciones que comprenden varios contenedores. Al usar YAML, Docker Compose permite una forma organizada y legible para humanos de administrar aplicaciones contenerizadas, lo que facilita la configuración y el mantenimiento de entornos complejos.
Por ejemplo, un archivo YAML en Docker Compose podría definir un servicio web usando una imagen Nginx y un servicio de base de datos usando una imagen PostgreSQL. El archivo describe cómo interactúan estos servicios, los puertos que exponen y las variables de entorno que requieren. Este método simplifica la orquestación de implementaciones de varios contenedores y mejora la portabilidad en diferentes entornos.
Docker es una herramienta popular para implementar y ejecutar aplicaciones contenerizadas. Es conocido por su confiabilidad, eficiencia de recursos y escalabilidad.
Ansible Playbooks
Ansible, una herramienta de automatización popular para aprovisionamiento y configuración de sistemas, utiliza YAML para describir tareas de automatización en lo que se conoce como playbooks. Estos playbooks escritos en YAML describen los pasos necesarios para administrar configuraciones, implementar aplicaciones y orquestar flujos de trabajo complejos en varias máquinas. La legibilidad de YAML asegura que estos scripts de automatización sean fáciles de entender, modificar y compartir entre los miembros del equipo.
Un playbook de Ansible podría incluir tareas para instalar paquetes de software, administrar archivos y directorios, o ejecutar comandos en servidores remotos.
Kubernetes
Estos manifiestos YAML especifican configuraciones como implementaciones, servicios, pods y otros recursos de Kubernetes. Al usar YAML, Kubernetes permite a los operadores administrar declarativamente su infraestructura, asegurando la consistencia y la repetibilidad en los entornos.
Por ejemplo, un manifiesto de implementación de Kubernetes escrito en YAML podría definir el número de réplicas para una aplicación, la imagen del contenedor que se va a usar y los recursos asignados a cada contenedor. Este manifiesto sirve como una única fuente de verdad para la implementación de la aplicación, permitiendo actualizaciones y reversiones sin problemas.
Kubernetes es una plataforma de orquestación de contenedores de código abierto que se utiliza para automatizar la implementación, el escalado y la gestión de aplicaciones en contenedores. Kubernetes funciona basándose en "estados", es decir, intentando alcanzar un estado deseado a partir de uno actual, basándose en instrucciones específicas.

Intercambio de datos entre lenguajes de programación
YAML permite la serialización y deserialización de datos, lo que lo convierte en una excelente opción para el intercambio de datos entre diferentes lenguajes de programación y sistemas. Su formato independiente del lenguaje asegura que los datos estructurados en YAML puedan ser fácilmente analizados y generados por varios lenguajes.
YAML es neutral en cuanto al lenguaje, por lo que resulta ideal para compartir datos entre distintos lenguajes de programación.
APIs y especificación OpenAPI
YAML se utiliza para definir especificaciones de API, particularmente en la Especificación OpenAPI (anteriormente conocida como Swagger). Al describir las API RESTful en YAML, los desarrolladores pueden crear un plan completo de sus puntos finales de API, modelos de solicitud y respuesta, métodos de autenticación y otros detalles. Esta definición de API basada en YAML se puede utilizar luego para generar documentación interactiva, SDKs de cliente y stubs de servidor, simplificando los procesos de desarrollo e integración.
Una API definida en YAML permite una comunicación clara entre los equipos de back-end y front-end, desarrolladores externos y otras partes interesadas. Asegura que todos tengan una comprensión consistente de cómo funciona la API, reduciendo los problemas de integración y acelerando los plazos de desarrollo.
Bibliotecas de serialización
Muchos lenguajes de programación, como Python y Ruby, ofrecen bibliotecas que permiten la serialización de objetos a YAML y la deserialización de YAML a objetos. Esta capacidad permite a los desarrolladores guardar estructuras de datos complejas en archivos o transmitirlas a través de redes en un formato que es legible para humanos y fácil de analizar para las máquinas. El soporte de YAML para tipos de datos enriquecidos asegura que incluso los objetos complejos puedan representarse y reconstruirse con precisión en diferentes entornos de programación.
Por ejemplo, una aplicación Python podría serializar un objeto de configuración a un archivo YAML, que otra aplicación escrita en Ruby pueda leer e interpretar. Esta interoperabilidad facilita el intercambio de datos en sistemas heterogéneos y simplifica la comunicación entre lenguajes.
Generación de documentos
YAML juega un papel importante en las herramientas que generan documentación, especialmente para las API y los proyectos de software. Al definir la estructura y el contenido de la documentación en YAML, los desarrolladores pueden mantener fuentes de documentación que sean fáciles de leer y actualizar.
Swagger y documentación de API
Herramientas como Swagger utilizan archivos YAML para definir API RESTful, que luego pueden generar documentación interactiva. Esta documentación permite a los desarrolladores y partes interesadas explorar los puntos finales de la API, comprender los formatos de solicitud y respuesta, y probar las llamadas de la API directamente desde la interfaz de documentación. Al usar YAML como formato de origen, la documentación permanece sincronizada con la implementación real de la API, reduciendo las discrepancias y mejorando la experiencia del desarrollador.
Las definiciones YAML incluyen detalles como rutas de puntos finales, métodos HTTP, parámetros, respuestas y códigos de error. Este enfoque asegura que todos los aspectos de la API estén documentados y sean accesibles, promoviendo un mejor uso e integración.
Integración continua y entrega continua (CI/CD)
YAML se utiliza comúnmente para definir canalizaciones y flujos de trabajo en sistemas de integración continua y entrega continua (CI/CD). Su sintaxis sencilla y su estructura jerárquica lo hacen adecuado para describir procesos complejos de compilación, prueba e implementación.
GitLab CI/CD
GitLab CI/CD utiliza archivos .gitlab-ci.yml para configurar canalizaciones para proyectos alojados en GitLab. En estos archivos YAML, los desarrolladores especifican etapas, trabajos, scripts y otras configuraciones que determinan cómo se compila, prueba e implementa el código. La legibilidad de YAML asegura que las configuraciones de la canalización sean transparentes y fáciles de administrar, facilitando la colaboración entre los miembros del equipo.
Un archivo YAML típico de GitLab CI/CD podría definir etapas como compilación, prueba e implementación, con trabajos específicos en cada etapa. Cada trabajo incluye scripts para ejecutar comandos, variables para configurar el entorno y condiciones para controlar cuándo se ejecuta el trabajo. Este enfoque estructurado permite flujos de trabajo de automatización sofisticados que mejoran la calidad del software y la velocidad de entrega.
CircleCI
CircleCI utiliza archivos config.yml para definir los procesos de compilación, prueba e implementación. Los desarrolladores pueden describir flujos de trabajo, definir dependencias y configurar rutas de ejecución paralelas en un archivo YAML. Este enfoque permite canalizaciones de CI/CD flexibles y escalables que pueden adaptarse a las necesidades de diferentes proyectos y equipos.
La configuración YAML de CircleCI permite funciones como el almacenamiento en caché de dependencias, la ejecución de pruebas en paralelo y la implementación en varios entornos. Al administrar estas configuraciones en YAML, los equipos pueden controlar las versiones de sus canalizaciones de CI/CD junto con su código de aplicación, asegurando la consistencia y la trazabilidad.
Infraestructura como código (IaC)
YAML se utiliza para definir la infraestructura como código, es decir, el uso de código en lugar de procesos manuales para definir y gestionar la infraestructura de TI. IaC permite una configuración más eficaz y coherente de la infraestructura de TI. Como parte de las prácticas DevOps, los archivos YAML sirven como plantillas para definir secuencias de acciones y configuraciones en un formato fácil de entender.
Las implementaciones de Azure Container Apps se basan en una plantilla de Azure Resource Manager (ARM). En este artículo se incluyen ejemplos de las configuraciones de ARM y YAML para los recursos de Container Apps usados con frecuencia. Para obtener una lista completa de los recursos de Container Apps, consulte Plantillas de Azure Resource Manager para Container Apps. El código que se muestra en este artículo es solo para fines de ejemplo. Para usar una versión de API específica en ARM o Bicep, actualice la versión a la que se hace referencia en las plantillas.
En las tablas siguientes se describen las propiedades usadas habitualmente disponibles en el recurso de entorno de Container Apps.
| Propiedad | Descripción |
|---|---|
| Tipo de aplicación que se va a crear | Actualmente admite functionapp y workflowapp. Es posible que se admita valores adicionales en el futuro. |
| Estado de una operación de larga duración | Por ejemplo, cuando se crea una revisión de contenedor. Los valores posibles son "aprovisionando", "aprovisionado" y "error". |
| Identificador de entorno de la aplicación de contenedor | Se trata de una propiedad necesaria para crear una aplicación contenedora. |
| Si se establece en single | Se desactivan automáticamente las revisiones antiguas y solo se conserva la última revisión activa. |
| Objeto de configuración | Que hace referencia a las credenciales de los registros de contenedores privados. |
| Nombre descriptivo de una revisión |
En las tablas siguientes se describen las propiedades usadas habitualmente en el recurso de aplicación de contenedor.
En las tablas siguientes se describen las propiedades usadas habitualmente en el recurso de trabajo de Container Apps.
El identificador de entorno del trabajo de Container Apps. Esta propiedad es necesaria para crear un trabajo de Container Apps.
Tipo de desencadenador para un trabajo de Container Apps.
