Visualiza tus sistemas: Creando diagramas como código con Python
Publicado el 30 de junio de 2023 en Cloud
Seguro te ha pasado: necesitas un diagrama de la arquitectura de tu sistema para una presentación o para documentar un proyecto. Abres una herramienta online, pasas un buen rato arrastrando cajas, conectando flechas, alineando todo… y a las dos semanas, la arquitectura cambia y tu diagrama queda obsoleto. Un clásico.
Durante mucho tiempo, ese fue mi flujo de trabajo, hasta que descubrí el concepto de “Diagramas como Código” (Diagrams as Code). La idea es simple pero poderosa: definir la infraestructura y los flujos de un sistema usando un lenguaje de programación. Mi herramienta favorita para esto es, sin duda, la librería diagrams de Python.
En este post te quiero contar por qué he adoptado esta práctica y cómo puedes empezar a crear diagramas complejos que se actualizan tan fácil como cambiar un par de líneas de código.
¿Por qué “Diagramas como Código”?
Adoptar este enfoque tiene ventajas que van mucho más allá de simplemente “dibujar” con código:
- Versionamiento: Tus diagramas viven en tu repositorio de Git. Puedes ver su historial, revertir cambios y saber exactamente cuándo y por qué se modificó la arquitectura.
- Consistencia: Al definir los componentes con código, te aseguras de que todos los diagramas de la empresa usen los mismos íconos y convenciones.
- Rapidez: Una vez que tienes la base, añadir o quitar un servicio es cuestión de añadir o borrar una línea de código, no de pasar minutos reacomodando cajas y flechas.
- Fuente Única de Verdad: El código no miente. El diagrama representa lo que el código dice, eliminando ambigüedades.
Manos a la obra: la librería diagrams
La librería diagrams te permite describir arquitecturas de nube con proveedores como AWS, Azure, GCP, Kubernetes, entre otros, sin necesidad de herramientas de diseño.
Primero, la instalación es tan sencilla como cualquier otro paquete de Python:
pip install diagrams
Además, necesitas tener instalado Graphviz, que es el motor que diagrams usa por debajo para renderizar los gráficos. Puedes instalarlo con el gestor de paquetes de tu sistema (ej. brew install graphviz en macOS o sudo apt-get install graphviz en Debian/Ubuntu).
Ejemplo 1: Una API serverless sencilla
Imaginemos que queremos diagramar una API simple en AWS. El flujo es: un usuario se conecta a un API Gateway, que invoca una función Lambda, y esta a su vez lee datos de una tabla en DynamoDB.
El código en Python se vería así:
# api_simple.py
from diagrams import Diagram
from diagrams.aws.compute import Lambda
from diagrams.aws.database import DynamoDB
from diagrams.aws.network import APIGateway
with Diagram("API Serverless Sencilla", show=False):
api_gateway = APIGateway("API Gateway")
mi_funcion_lambda = Lambda("Procesador de Datos")
tabla_dynamo = DynamoDB("Tabla de Usuarios")
api_gateway >> mi_funcion_lambda >> tabla_dynamo
Al ejecutar python api_simple.py, se generará una imagen como esta:

Ejemplo 2: Arquitectura Web Más Completa
Ahora, vamos a un caso un poco más realista: una aplicación web dentro de una VPC con una base de datos RDS.
# web_app.py
from diagrams import Diagram, Cluster
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB, Route53
with Diagram("Aplicación Web con Base de Datos", show=False):
dns = Route53("DNS")
load_balancer = ELB("Load Balancer")
with Cluster("Servidores Web"):
servidores_web = [EC2("Worker 1"),
EC2("Worker 2"),
EC2("Worker 3")]
with Cluster("Base de Datos"):
db_primaria = RDS("DB Primaria")
db_primaria - [RDS("Réplica 1"),
RDS("Réplica 2")]
dns >> load_balancer >> servidores_web
servidores_web >> db_primaria
Este código introduce el concepto de Cluster para agrupar componentes, haciendo el diagrama mucho más legible.

Conclusión
Crear diagramas como código ha cambiado por completo la forma en que documento y comparto la arquitectura de mis proyectos. Me da una agilidad que ninguna herramienta visual puede ofrecer y mantiene mi documentación sincronizada con la realidad de mi código.
Si aún no lo has probado, te animo a darle una oportunidad a la librería diagrams. Es una de esas herramientas que, una vez que la usas, te preguntas cómo pudiste vivir sin ella.
También te podría interesar
Arquitectura de un pipeline de datos en AWS
Te comparto mi arquitectura para construir un pipeline de datos moderno en AWS, desde la ingesta en tiempo real hasta el análisis. Una guía para tomar mejores decisiones de negocio.
Serverless en AWS: 3 servicios clave que simplifican mi desarrollo backend
La palabra 'serverless' es más que una moda. Te muestro cómo uso el trío de AWS Lambda, API Gateway y DynamoDB para lanzar APIs y microservicios de forma rápida y escalable.
Mi Arquitectura Serverless 'Go-To' en AWS para Proyectos Rápidos y Escalables
Te comparto mi plantilla de arquitectura serverless en AWS que uso para lanzar backends en minutos, no en días. Una combinación de Lambda, API Gateway y DynamoDB para máxima eficiencia.
Escrito por
Osvaldo Trujillo
Ingeniero de Machine Learning, Arquitecto AWS y desarrollador. Apasionado por la tecnología y la creación de soluciones que aportan valor a través de los datos.
GitHub LinkedIn Contáctame