Visualiza tus sistemas: Creando diagramas como código con Python

Publicado el 30 de junio de 2023 en Cloud

Diagrama de una arquitectura cloud generado con Python.

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:

Diagrama de una API Serverless simple en AWS

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.

Diagrama de una aplicación web completa en AWS

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


Foto de Osvaldo Trujillo

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