programa
A lo largo de los años he trabajado con infinidad de archivos de configuración, y YAML destaca por su sencillez y legibilidad. Ya sea al configurar flujos de trabajo en Kubernetes, definir servicios en Docker o estructurar solicitudes de API, YAML hace que las configuraciones complejas sean mucho más manejables. Su estructura limpia basada en sangrías evita el ruido de formatos como XML y, aun así, ofrece flexibilidad.
En esta guía te explico la sintaxis, la estructura, las funciones avanzadas y las buenas prácticas de YAML para que puedas trabajar con él con total confianza.
¿Qué es YAML?
YAML (Yet Another Markup Language / YAML Ain’t Markup Language) es un formato de serialización de datos que prioriza la legibilidad y la facilidad de uso. Mientras que XML utiliza etiquetas anidadas al estilo HTML y JSON usa llaves y comillas, como los diccionarios de Python, YAML es más conciso y utiliza la sangría para definir la estructura, lo que lo hace más cómodo para las personas.
YAML admite varios tipos de datos, incluidos escalares (cadenas, números, booleanos), secuencias (listas) y mapeos (pares clave-valor). Se usa ampliamente en archivos de configuración, automatización de infraestructuras e intercambio de datos, especialmente en herramientas como Kubernetes, Docker y Ansible.
Además, YAML es un superconjunto de JSON, lo que significa que los archivos JSON válidos pueden analizarse como YAML. Los archivos YAML suelen tener la extensión .yaml o .yml.
También puedes aprender más sobre YAML en su sitio web.
Sintaxis y estructura de YAML
En esta sección veremos los principios fundamentales de la sintaxis de YAML, incluidos los pares clave-valor, las listas, los datos anidados y los comentarios.
Reglas básicas de sintaxis
Estas son algunas reglas sintácticas básicas de YAML:
- La sangría con espacios define la estructura, así que evita las tabulaciones.
- Los pares clave-valor siguen la estructura
clave: valor, similar a otros lenguajes. - Los guiones al inicio de la línea indican una lista.
- El uso de
#crea líneas de comentario.
# Aquí tienes un ejemplo de YAML
name: John Doe
age: 30
skills:
- Python
- YAML
Pares clave-valor
YAML representa los datos como pares clave-valor, de manera similar a los diccionarios en Python. Esto suele definir información que se pasa a distintos archivos de configuración y ajustes. No es necesario poner comillas en cadenas o claves; basta con escribir la clave y los valores que necesites:
location: New York
country: USA
security-level: user
Listas en YAML
Las listas se representan con guiones (-). Esto te permite enumerar varios elementos bajo una misma clave. A menudo, los editores de marcado las muestran visualmente como viñetas.
fruits:
- Apple
- Banana
- Cherry
Datos anidados
Las estructuras anidadas permiten representar datos jerárquicos usando la sangría. Piensa en ellas como diccionarios anidados. Con la sangría indicas qué claves son subconjuntos de otras.
person:
name: Alice
details:
age: 25
city: London
Comentarios
Los comentarios empiezan con # y los analizadores de YAML los ignoran. Son comentarios de una sola línea.
# Esto es un comentario
username: admin
password: secret
Funciones avanzadas de YAML
YAML incluye funciones potentes como cadenas multilínea, tipos de datos y anclas que hacen los documentos más eficientes y estructurados. En esta sección veremos estas capacidades con ejemplos prácticos.
Cadenas multilínea
YAML admite cadenas multilínea con | (bloque literal) o > (bloque plegado).
- El bloque literal
|crea una nueva línea\npor cada salto de línea. - El bloque plegado
>solo crea una nueva línea cuando hay saltos de línea consecutivos.
literal: |
This is a
multi-line string.
folded: >
This is another
multi-line string.
Se entiende mejor viendo la salida.
- Para el bloque
|(literal):
This is a
multi-line string.
- Para el bloque
>(plegado):
This is another multi-line string.
Tipos de datos en YAML
YAML admite varios tipos de datos, como cadenas, números, booleanos y valores nulos. Detecta automáticamente los tipos según el formato, pero también permite definirlos explícitamente.
El siguiente ejemplo muestra cómo usar los tipos de datos básicos en YAML:
string_implicit: Hello, YAML! # No hacen falta comillas salvo que sean necesarias
string_double_quoted: "Supports escape sequences like \n and \t"
string_single_quoted: 'Raw text, no escape sequences'
integer: 42 # Números enteros
float: 3.14 # Números con decimales
boolean_true: true
boolean_false: false
null_value: null # Valor nulo
null_tilde: ~ # Otra forma de representar null
YAML permite declaraciones de tipo explícitas con !!type cuando sea necesario:
explicit_string: !!str 123 # Fuerza 123 a ser una cadena
explicit_integer: !!int "42" # Fuerza "42" a ser un entero
explicit_float: !!float "3.14" # Fuerza "3.14" a ser un float
Como YAML se usa a menudo para datos estructurados, admite:
- Listas (secuencias):
fruits:
- Apple
- Banana
- Cherry
- Diccionarios (mapeos):
person:
name: Alice
age: 30
is_student: false
Anclas y alias
YAML te permite definir valores reutilizables con anclas (&) y referenciarlos después mediante alias (*). Esto ayuda a reducir la redundancia en los archivos de configuración y los hace más limpios y fáciles de mantener.
defaults: &default_settings
retries: 3
timeout: 30
server1:
host: example.com
retries: *default_settings # Reutiliza el valor de retries de defaults
La sintaxis <<: permite fusionar pares clave-valor de un ancla en otro mapeo. Si una clave existe en ambos, el valor nuevo anula al original.
defaults: &default_settings
retries: 3
timeout: 30
server1:
<<: *default_settings # Fusiona todos los pares clave-valor de default_settings
host: example.com # Esta clave se añade a los datos combinados
Este sería el resultado final:
server1:
retries: 3
timeout: 30
host: example.com
Las anclas y los alias son especialmente útiles en archivos de configuración grandes en los que repetir valores a mano sería ineficiente. Ayudan a mantener los archivos YAML DRY (Don't Repeat Yourself) y facilitan las actualizaciones.
Casos de uso habituales de YAML
YAML se usa ampliamente en desarrollo de software, automatización de infraestructuras y gestión de APIs. Su sintaxis legible lo convierte en un formato preferido para archivos de configuración, serialización de datos e Infrastructure as Code (IaC). Veamos sus aplicaciones más comunes.
Archivos de configuración
YAML se utiliza de forma generalizada para la configuración en aplicaciones como Docker Compose, Kubernetes y canales de CI/CD. Su claridad facilita que cualquiera pueda abrir archivos YAML de Docker y entender qué está pasando.
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
environment:
- NGINX_HOST=localhost
- NGINX_PORT=80
La legibilidad de YAML y el soporte de anclas y alias ayudan a reducir la repetición, lo que lo hace más mantenible que JSON o XML.
Aprende más sobre YAML y su uso en Docker en este curso intermedio de Docker.
Serialización y transferencia de datos
YAML se usa para serializar datos para APIs y herramientas de gestión de configuración, convirtiendo estructuras de datos complejas en un formato legible para personas y fácilmente analizable por máquinas.
Por ejemplo, un cuerpo de solicitud de API en formato YAML:
user:
id: 123
name: "John Doe"
email: "johndoe@example.com"
active: true
La estructura basada en sangrías de YAML elimina sintaxis innecesaria, lo que lo hace ligero, legible y fácil de modificar frente a JSON.
Infrastructure as Code (IaC)
Herramientas de gestión de configuración como Ansible y Kubernetes utilizan YAML para definir estados del sistema, automatizar procesos y garantizar la coherencia entre entornos.
- En Ansible, YAML se usa para escribir playbooks que definen estados del sistema, tareas y dependencias, asegurando una configuración coherente de los componentes de la infraestructura.
- Kubernetes utiliza manifiestos YAML para definir recursos como pods, servicios y deployments, lo que permite la orquestación automatizada de aplicaciones en contenedores.
Este es un ejemplo de configuración de un Pod de Kubernetes:
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: app-container
image: my-app:latest
ports:
- containerPort: 8080
Descubre más sobre cómo se usa YAML en Kubernetes en este curso de Introducción a Kubernetes.
Documentación de APIs
Especificaciones de API como OpenAPI y Swagger usan YAML para definir endpoints y estructuras de datos de forma clara. Con YAML se describen métodos de API, parámetros de solicitud, formatos de respuesta y métodos de autenticación.
Aquí tienes un ejemplo de especificación OpenAPI en YAML:
openapi: 3.0.0
info:
title: User API
version: "1.0"
paths:
/users:
get:
summary: Retrieve a list of users
responses:
"200":
description: Successful response
Las especificaciones OpenAPI, por ejemplo, utilizan YAML para documentar APIs REST. Esto les permite ofrecer una base clara para generar SDKs de cliente, documentación interactiva y pruebas automatizadas. Este formato estructurado garantiza la coherencia entre implementaciones de API.
Trabajar con archivos YAML
YAML se usa ampliamente para archivos de configuración, automatización y serialización de datos, pero como depende de la sangría, un formato correcto es clave. Así es como puedes leer, escribir, validar y editar YAML de forma eficaz.
Leer y escribir YAML en Python
La biblioteca PyYAML de Python puede analizar y generar YAML.
Imagina que tienes el siguiente archivo de configuración YAML:
database:
host: localhost
port: 5432
user: admin
password: secret
Así puedes trabajar con tu archivo de configuración en Python:
import yaml
# Cargar datos YAML
with open("config.yaml", "r") as file:
data = yaml.safe_load(file) # safe_load evita la ejecución de código arbitrario
# Modificar datos (opcional)
data["database"]["user"] = "new_user"
# Escribir datos YAML
with open("output.yaml", "w") as file:
yaml.dump(data, file, default_flow_style=False)
Si te interesa trabajar con datos JSON en Python, échale un vistazo al completo tutorial de JSON en Python.
Validar archivos YAML
Para asegurar una estructura correcta, puedes usar herramientas que detecten tabulaciones en lugar de espacios o problemas típicos como caracteres repetidos, errores de sintaxis y espacios finales.
Estos son algunos validadores de YAML populares:
- Herramienta CLI: yamllint (linter basado en Python)
- Validadores online: YAML Lint, validador YAML de JSON Formatter
Edición de YAML
Puedes escribir y editar YAML en cualquier editor de texto, pero las herramientas de linting y el resaltado de sintaxis mejoran la legibilidad.
Algunos de mis editores favoritos:
- VS Code (con plugins de YAML)
- PyCharm (compatibilidad nativa)
- Sublime Text (con resaltado de sintaxis YAML)
Errores comunes a evitar en YAML
A pesar de su sencillez, es fácil cometer errores y tener typos al trabajar con YAML. En esta sección repasamos estos fallos y te damos buenas prácticas para escribir archivos limpios y correctos. ¡Por eso también recomiendo usar un linter o un editor de texto adecuado!
Mezclar tabulaciones y espacios
YAML se basa en espacios para la sangría: nunca mezcles espacios y tabulaciones. Las tabulaciones romperán tu script YAML. Esto es deliberado: distintos sistemas interpretan las tabs de forma diferente y, para minimizar problemas, se prefieren los espacios.
Sangría incorrecta
Mantén una sangría coherente para evitar errores de análisis. Dado que la sangría es el único método de YAML para indicar jerarquía, un mal anidamiento puede causar problemas en tu código. Es fácil «esconder» un par clave: valor donde no toca, así que vigila esas sangrías.
Olvidar las comillas en caracteres especiales
Usa comillas para cadenas que contengan caracteres especiales o espacios. Elementos como barras invertidas, comas, signos de exclamación, etc., necesitan comillas para leerse como cadenas.
path: "/home/user/documents"
message: "Hello, World!"
Con una validación adecuada, una edición estructurada y usando PyYAML en Python, podrás trabajar con archivos YAML de forma eficaz evitando los errores más comunes.
Conclusión
YAML es un formato potente y a la vez sencillo, muy usado en configuración, serialización de datos y automatización de infraestructuras. Si comprendes su sintaxis, estructura y buenas prácticas, podrás trabajar con YAML con soltura en múltiples aplicaciones.
Si te interesa aplicar YAML en escenarios reales:
- Aprende cómo se usa YAML en flujos de trabajo de CI/CD con este curso de CI/CD para Machine Learning.
- Explora cómo las APIs utilizan YAML en sus especificaciones en este curso de Introducción a las APIs en Python.
- Profundiza en la contenerización y la automatización de infraestructuras en este itinerario de aprendizaje de Containerization and Virtualization.
Conviértete en Ingeniero de Datos
FAQs
¿YAML es universal?
Siempre que el origen o el destino de los datos puedan leer YAML, es un método viable y útil para serializar y transportar datos. Asegúrate de enviar los datos a un destino que pueda procesar YAML.
¿YAML es seguro? ¿Pueden los archivos YAML introducir riesgos de seguridad?
YAML en sí es solo un formato de datos, pero surgen riesgos de seguridad al analizar archivos YAML no confiables. El método por defecto yaml.load() en PyYAML de Python puede ejecutar código arbitrario incrustado en YAML, lo que supone un riesgo. En su lugar, usa siempre yaml.safe_load() para evitar la ejecución involuntaria de código malicioso. Del mismo modo, cuando uses YAML en aplicaciones, aplica una validación estricta del esquema para evitar vulnerabilidades de seguridad.
¿Puede YAML admitir variables de entorno?
¡Sí! Aunque YAML no procesa directamente variables de entorno, muchas herramientas (como Docker Compose y Kubernetes) permiten referenciarlas dentro de archivos YAML.
¿Cómo se gestionan los comentarios en YAML?
YAML admite comentarios de una sola línea con el símbolo #, pero no admite comentarios multilínea. Si necesitas comentarios multilínea, un truco habitual es usar una clave ficticia como _comment. Sin embargo, esto es solo una convención y no será ignorada por los analizadores YAML salvo que tu aplicación la filtre específicamente.
Soy un científico de datos con experiencia en análisis espacial, aprendizaje automático y canalización de datos. He trabajado con GCP, Hadoop, Hive, Snowflake, Airflow y otros procesos de ciencia/ingeniería de datos.

