Programa
A lo largo de los años, he trabajado con innumerables archivos de configuración, y YAML ha destacado por su sencillez y legibilidad. Ya sea configurando flujos de trabajo en Kubernetes, definiendo servicios en Docker o estructurando peticiones API, YAML hace que las configuraciones complejas sean más manejables. Su estructura limpia, basada en la indentación, elimina el desorden de formatos como XML, sin dejar de ser flexible.
En esta guía, te guiaré a través de la sintaxis, la estructura, las funciones avanzadas y las mejores prácticas de YAML para que puedas trabajar con él con 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 una mezcla de etiquetas anidadas similares a HTML y JSON utiliza llaves y comillas, de forma muy parecida a los diccionarios de Python, YAML es más conciso y utiliza la sangría para definir la estructura, lo que lo hace más amigable para el ser humano.
YAML admite varios tipos de datos, como escalares (cadenas, números, booleanos), secuencias (listas) y mapeos (pares clave-valor). Se utiliza mucho 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 una extensión .yaml o .yml.
También puedes obtener más información sobre YAML en su sitio web .
Sintaxis y estructura de YAML
Esta sección explorará los principios fundamentales de la sintaxis YAML, incluidos los pares clave-valor, las listas, los datos anidados y los comentarios.
Reglas básicas de sintaxis
Existen algunas reglas sintácticas básicas para YAML:
- La sangría espacial denota estructura, ¡así que evita esas tabulaciones!
- Los pares clave-valor siguen una estructura
key: value, similar a la de otros lenguajes. - Utilizar guiones al principio de las líneas denotará una lista.
- Si utilizas
#crearás líneas de comentario.
# Here is an example of YAML
name: John Doe
age: 30
skills:
- Python
- YAML
Pares clave-valor
YAML representa los datos como pares clave-valor, de forma similar a los diccionarios en Python. Esto a menudo denotará información dada a diferentes archivos de configuración y ajustes. No es necesario denotar las cadenas o claves con comillas; basta con escribir la clave y los valores necesarios:
location: New York
country: USA
security-level: user
Listas en YAML
Las listas se representan mediante guiones (-). Esto te permitirá listar varios objetos bajo una misma clave. Esto suele representarse visualmente con viñetas cuando lo leen los editores de marcado.
fruits:
- Apple
- Banana
- Cherry
Datos anidados
Las estructuras anidadas permiten la representación jerárquica de datos mediante sangría. Piensa en ellos como si fueran diccionarios anidados. Utilizando la sangría, denotas qué teclas son subconjuntos de otras.
person:
name: Alice
details:
age: 25
city: London
Comentarios
Los comentarios empiezan por # y son ignorados por los analizadores sintácticos de YAML. Estos comentarios son de una sola línea.
# This is a comment
username: admin
password: secret
Funciones avanzadas de YAML
YAML incluye potentes funciones como cadenas multilínea, tipos de datos y anclajes que hacen que los documentos sean más eficientes y estructurados. En esta sección, exploraremos estas capacidades con ejemplos prácticos.
Cadenas de varias líneas
YAML admite cadenas de varias líneas utilizando | (bloque literal) o > (bloque plegado).
|el bloque literal creará una nueva línea\npara cada salto de línea.>El bloque plegado sólo hará una línea nueva para los saltos de línea consecutivos.
literal: |
This is a
multi-line string.
folded: >
This is another
multi-line string.
Lo anterior se entiende mejor mostrando la salida.
- Para el
|(bloque literal):
This is a
multi-line string.
- Para el
>(bloque doblado):
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 basándose en el formato, pero también permite definiciones explícitas de tipos.
El siguiente ejemplo muestra el uso de tipos de datos básicos en YAML:
string_implicit: Hello, YAML! # No quotes needed unless necessary
string_double_quoted: "Supports escape sequences like \n and \t"
string_single_quoted: 'Raw text, no escape sequences'
integer: 42 # Whole numbers
float: 3.14 # Numbers with decimals
boolean_true: true
boolean_false: false
null_value: null # Null value
null_tilde: ~ # Another way to represent null
YAML permite declaraciones explícitas de tipos utilizando !!type cuando sea necesario:
explicit_string: !!str 123 # Forces 123 to be a string
explicit_integer: !!int "42" # Forces "42" to be an integer
explicit_float: !!float "3.14" # Forces "3.14" to be a float
Como YAML se utiliza a menudo para datos estructurados, es compatible:
- 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 mediante anclas (&) y referenciarlos posteriormente mediante alias (*). Esto ayuda a reducir la redundancia en los archivos de configuración, haciéndolos más limpios y fáciles de mantener.
defaults: &default_settings
retries: 3
timeout: 30
server1:
host: example.com
retries: *default_settings # Reuses the retries value from defaults
La sintaxis <<: permite fusionar pares clave-valor de un anclaje en otro mapeo. Si una clave existe en ambos, el nuevo valor anula al original.
defaults: &default_settings
retries: 3
timeout: 30
server1:
<<: *default_settings # Merges all key-value pairs from default_settings
host: example.com # This key is added to the merged data
Esta es la estructura final resuelta:
server1:
retries: 3
timeout: 30
host: example.com
Los anclajes y alias son especialmente útiles en archivos de configuración grandes, donde repetir los valores manualmente sería ineficaz. Ayudan a mantener los archivos YAML DRY (Don't Repeat Yourself) y facilitan las actualizaciones.
Casos comunes de uso de YAML
YAML se utiliza mucho en el desarrollo de software, la automatización de infraestructuras y la gestión de API. Su sintaxis legible por humanos lo convierte en el formato preferido para archivos de configuración, serialización de datos e Infraestructura como Código (IaC). Exploremos sus aplicaciones más comunes.
Archivos de configuración
YAML se utiliza ampliamente para la configuración en aplicacionescomo Docker Compose, Kubernetes y pipelines CI/CD. Su facilidad de comprensión hace que cualquiera pueda coger los archivos de configuración YAML de Docker y entender lo que ocurre.
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
environment:
- NGINX_HOST=localhost
- NGINX_PORT=80
La legibilidad de YAML y su compatibilidad con anclas y alias ayudan a reducir las repeticiones, por lo que es más fácil de mantener 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 utiliza para serializar datos para API y herramientas de gestión de la configuración, convirtiendo estructuras de datos complejas en un formato legible por humanos y fácilmente analizable por máquinas.
Por ejemplo, un cuerpo de solicitud de API formateado en YAML:
user:
id: 123
name: "John Doe"
email: "johndoe@example.com"
active: true
La estructura basada en la indentación de YAML elimina la sintaxis innecesaria, lo que lo hace ligero, legible y fácil de modificar en comparación con JSON.
Infraestructura como código (IaC)
Las herramientas de gestión de la configuración, como Ansible y Kubernetes, aprovechan YAML para definir los estados del sistema, automatizar los procesos y garantizar la coherencia entre entornos.
- En Ansible, YAML se utiliza para escribir playbooks que definen los estados, tareas y dependencias del sistema, garantizando que los componentes de la infraestructura se configuren de forma coherente.
- Kubernetes utiliza manifiestos YAML para definir recursos como pods, servicios y despliegues, permitiendo la orquestación automatizada de aplicaciones en contenedores.
Aquí tienes 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
Aprende más sobre cómo se utiliza YAML en Kubernetesen este curso de Introducción a Kubernetes .
Documentación API
Las especificaciones API como OpenAPI y Swagger utilizan YAML para definir puntos finales y estructuras de datos de forma fácil de leer. YAML se utiliza para describir los métodos de la API, los parámetros de solicitud, los formatos de respuesta y los 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 las API RESTful. Esto les permite proporcionar un proyecto claro para generar SDK de cliente, documentación interactiva de la API y pruebas automatizadas. Este formato estructurado garantiza la coherencia entre las implementaciones de la API.
Trabajar con archivos YAML
YAML se utiliza mucho para archivos de configuración, automatización y serialización de datos, pero como se basa en la indentación, un formato adecuado es crucial. A continuación te explicamos cómo puedes leer, escribir, validar y editar YAML con eficacia.
Leer y escribir YAML en Python
La biblioteca PyYAML de Python puede analizar y generar YAML.
Imagina que tienes el siguiente archivo YAML de configuración:
database:
host: localhost
port: 5432
user: admin
password: secret
A continuación te explicamos cómo puedes trabajar con tu archivo de configuración en Python:
import yaml
# Load YAML data
with open("config.yaml", "r") as file:
data = yaml.safe_load(file) # safe_load prevents arbitrary code execution
# Modify data (optional)
data["database"]["user"] = "new_user"
# Write YAML data
with open("output.yaml", "w") as file:
yaml.dump(data, file, default_flow_style=False)
Si te interesa trabajar con datos JSON en Python, consulta el tutorialcompleto sobre JSON en Python.
Validar archivos YAML
Para garantizar una estructura correcta, puedes utilizar herramientas que comprueben si hay tabuladores en lugar de espacios o problemas extraños como caracteres repetidos, problemas de sintaxis y espacios finales.
Estos son algunos validadores de YAML populares:
- Herramienta CLI: yamllint (linter basado en Python)
- Validadores en línea: YAML Lint, Validador YAML del Formateador JSON
Editar 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:
- Código VS (con plugins YAML)
- PyCharm (soporte integrado)
- Sublime Text (con resaltado sintáctico de YAML)
Errores comunes a evitar en YAML
A pesar de su simplicidad, puedes tener fácilmente problemas y errores tipográficos al trabajar con YAML. Esta sección trata de estos errores y proporciona las mejores prácticas para escribir archivos limpios y correctos. ¡También es la razón por la que recomiendo utilizar un linter o editor de texto!
Mezclar tabuladores y espacios
YAML utiliza espacios para la sangría: nunca mezcles espacios y tabuladores. Las pestañas simplemente romperán tu script YAML. En realidad, se trata de una decisión consciente, ya que los distintos sistemas leen las tabulaciones de forma diferente y, por tanto, para minimizar el impacto, se prefiere utilizar espacios.
Sangría incorrecta
Asegúrate de que la sangría sea coherente para evitar errores de análisis. Dado que las sangrías son el único método de YAML para denotar jerarquía, un análisis incorrecto puede causar problemas en tu código. Puedes meter fácilmente un par de key: value en el lugar equivocado, ¡así que estate atento a esas hendiduras!
Olvidar las comillas para caracteres especiales
Utiliza comillas para las cadenas que contengan caracteres especiales o espacios. Cosas como barras invertidas, comas, signos de exclamación, etc., necesitan comillas para ser leídas como cadenas.
path: "/home/user/documents"
message: "Hello, World!"
Utilizando la validación adecuada, la edición estructurada y PyYAML de Python, puedes trabajar eficazmente con archivos YAML evitando los errores más comunes.
Conclusión
YAML es un formato potente pero sencillo, muy utilizado en configuración, serialización de datos y automatización de infraestructuras. Puedes trabajar eficazmente con YAML en diversas aplicaciones si comprendes su sintaxis, estructura y mejores prácticas.
Si estás interesado en aplicar YAML en escenarios del mundo real:
- Aprende cómo se utiliza YAML en los flujos de trabajo CI/CD con este curso CI/CD para el Aprendizaje Automático.
- Explora cómo las API utilizan YAML en sus especificaciones en este curso de Introducción a las API en Python.
- Profundiza en la contenedorización y la automatización de infraestructuras en este tema de Contenedorización y Virtualización.
Conviértete en Ingeniero de Datos
Preguntas frecuentes
¿Es YAML universal?
Siempre que la fuente de datos o el destino puedan leer YAML, es un método viable y útil de serializar y transportar datos. Asegúrate de que estás enviando datos a un objetivo que puede procesar YAML.
¿Es seguro YAML? ¿Pueden los archivos YAML introducir riesgos de seguridad?
YAML en sí no es más que un formato de datos, pero los riesgos de seguridad surgen al analizar archivos YAML no fiables. El método yaml.load() por defecto en PyYAML de Python puede ejecutar código arbitrario incrustado en YAML, lo que lo hace arriesgado. En su lugar, utiliza siempre yaml.safe_load() para evitar la ejecución involuntaria de código malicioso. Del mismo modo, cuando utilices YAML en aplicaciones, asegúrate de que la validación del esquema es estricta para evitar vulnerabilidades de seguridad.
¿Puede YAML soportar variables de entorno?
Sí. Aunque el propio YAML no procesa directamente variables de entorno, muchas herramientas (como Docker Compose y Kubernetes) permiten hacer referencia a variables de entorno dentro de los archivos YAML.
¿Cómo se gestionan los comentarios en YAML?
YAML admite comentarios de una sola línea utilizando el símbolo #, pero no admite comentarios de varias líneas. Si necesitas comentarios de varias líneas, una solución habitual es utilizar una tecla ficticia como _comment. Sin embargo, esto es sólo una convención y no será ignorado por los analizadores sintácticos de YAML a menos que tu aplicación lo 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.


