El autor seleccionó el Fondo de Diversidad en Tecnología para recibir una donación como parte del programa Write for DOnations .
Introducción
La herramienta Diagram as Code le permite crear un diagrama de arquitectura de su infraestructura. Puede reutilizar código, probar, integrar y automatizar el proceso de dibujo de diagramas, lo que le permitirá tratar la documentación como código y crear canales para mapear su infraestructura. Puede utilizar el diagramsscript con muchos proveedores de nube e infraestructura personalizada.
En este tutorial, creará un diagrama básico en Python y lo cargará en un contenedor de almacenamiento de objetos. Cuando termine, comprenderá cómo diagramsfunciona el script, lo que le permitirá crear nuevas integraciones.
Prerrequisitos
Para seguir este tutorial, necesitarás:
- Un servidor Ubuntu 20.04 con un usuario que no sea root, que puede configurar siguiendo la Configuración inicial del servidor con Ubuntu 20.04 . Los ejemplos de este tutorial se tomarán de un servidor Ubuntu 20.04 que se ejecuta en DigitalOcean.
- Python 3 versión 3.6 o superior instalado en su máquina, que puede configurar con el Paso 1 en Cómo instalar Python 3 y configurar un entorno de programación en un servidor Ubuntu 20.04 .
- Una cuenta de DigitalOcean. Si no tiene una, regístrese para obtener una nueva cuenta .
- Un espacio de DigitalOcean para almacenar datos con claves de acceso, que puedes configurar siguiendo nuestra documentación de Espacios .
Paso 1: Instalación de Graphviz
En este paso, instalará la herramienta Graphviz. Graphviz es el motor del diagramsmódulo y genera los diagramas.
Primero, actualice los paquetes de su servidor:
- sudo apt update
Luego, instale Graphviz con este comando:
- sudo apt install -y graphviz
La -yopción responde automáticamente a cualquier pregunta adicional que aparezca durante el proceso de instalación. También puedes descargar Graphviz para otras distribuciones .
Cuando finalice la instalación, tendrás Graphviz instalado.
Dado que utilizarás Pip3 más adelante en el tutorial para instalar las dependencias de Python, puedes comprobar que tienes la versión correcta:
- pip3 --version
Deberías ver algo como esto:
Outputpip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)
En este paso, actualizaste tu servidor, instalaste Graphviz y verificaste tu versión de Pip. A continuación, crearás el diagramsscript.
Paso 2: creación del script de Python
En este paso, escribirá un script de diagrama de ejemplo en Python.
Primero, crea una carpeta en la que trabajar:
- mkdir ~/my-diagram
Después de crear la carpeta para el proyecto, acceda a ella con este comando:
- cd ~/my-diagram
Luego, crea un requirements.txtarchivo para realizar un seguimiento de las dependencias del proyecto:
- echo -e "diagrams==0.21.1ngraphviz==0.16" | tee requirements.txt
Este comando tiene dos palabras clave: echoimprimirá la cadena y la -eopción analizará nuevas líneas con la inserción en un archivo de requisitosn bien formateado .
El |signo indica una tubería para los resultados de la sentencia echo. El teecomando toma la entrada de la tubería y crea un nuevo archivo a partir de ella, cuyo nombre se corresponde con el parámetro indicado: en este caso, requirements.txt.
El requirements.txtarchivo en Python proporciona una lista de módulos necesarios para ejecutar scripts correctamente. Por ahora, este proyecto tiene dos dependencias. Después de crear el archivo, verá un resultado como este:
Outputdiagrams=0.21.1graphviz=0.16
Esta pantalla indica los números de versión de las dos herramientas.
Ahora, escribirás el script de Python para crear la imagen del diagrama.
Asegúrate de que todavía estás en el directorio que creaste:
- cd ~/my-diagram
A continuación, abra un nuevo archivo utilizando nanosu editor de texto favorito:
- nano my-diagram.py
Añade el siguiente código:
mi-diagrama.py
from diagrams import Diagram, Cluster, Edge
Esta línea importará las piezas del diagrama necesarias para crear los elementos del diagrama genérico.
A continuación, debe importar lo necesario para dibujar la infraestructura de DigitalOcean que creará. En este ejemplo, creará un diagrama que muestra dos Droplets conectados a una base de datos con todos los hosts enviando registros a una instancia de Logstash .
Agregue las siguientes líneas para importar los íconos Droplet, DbaasPrimary y Logstash:
mi-diagrama.py
...from diagrams.digitalocean.compute import Dropletfrom diagrams.digitalocean.database import DbaasPrimaryfrom diagrams.elastic.elasticsearch import Logstash
Estas líneas importan los íconos necesarios para este tutorial. Puedes encontrar todos los íconos de DigitalOcean disponibles en la documentación de Mingrammer .
Con los íconos importados, puedes comenzar a crear el diagrama. Esta sección de código creará un diagrama llamado My Diagram: Droplets:
mi-diagrama.py
...with Diagram("My Diagram: Droplets", show=False, filename="my-diagram", direction="LR"):
El showparámetro puede abrirlo al crearlo, pero se ha establecido en Falseya que está trabajando en un host Linux. El archivo generado se llamará con la cadena que se le asigne filename. El directiones la dirección en la que desea que se imprima el diagrama. Los valores admitidos para directionson TB(Arriba – Abajo) y LR(Izquierda – Derecha). Seleccionar el directionpuede hacer que el diagrama sea más fácil de leer. Para este diagrama, utilizará LR.
Por último, añade los iconos al diagrama:
mi-diagrama.py
...with Diagram("My Diagram: Droplets", show=False, filename="my-diagram", direction="LR"): with Cluster("DigitalOcean"): droplet1 = Droplet("My first Droplet") droplet2 = Droplet("My second Droplet") db = DbaasPrimary("My database") logstash = Logstash("Logstash service")
Clustercrea un cuadro alrededor de sus Droplets en el diagrama, mostrándolos en un espacio llamado DigitalOcean. Droplet, DbaasPrimary, y Logstashcreará íconos con los nombres suministrados en cadenas.
A continuación, creará dependencias entre los distintos elementos del diagrama agregando estas líneas:
mi-diagrama.py
... [droplet1, droplet2] db [droplet1, droplet2] [droplet1, droplet2, db] Edge(color="firebrick",) logstash
Conecta tus Droplets a la base de datos DbaasPrimary creada anteriormente, tanto para lectura como para escritura. Luego, agrega una línea discontinua en color firebrickpara indicar una conexión desde los Droplets y la base de datos principal a Logstash.
El archivo final my-diagram.pyse verá así:
mi-diagrama.py
from diagrams import Diagram, Cluster, Edgefrom diagrams.digitalocean.compute import Dropletfrom diagrams.digitalocean.database import DbaasPrimaryfrom diagrams.elastic.elasticsearch import Logstashwith Diagram("My Diagram: Droplets", show=False, filename="my-diagram", direction="LR"): with Cluster("DigitalOcean"): droplet1 = Droplet("My first droplet") droplet2 = Droplet("My second droplet") db = DbaasPrimary("My database") logstash = Logstash("Logstash service") [droplet1, droplet2] db [droplet1, droplet2] [droplet1, droplet2, db] Edge(color="firebrick",) logstash
Guarde y cierre el archivo.
Ahora tienes un archivo llamado my-diagram.pyy otro llamado requirements.txten la misma carpeta.
Con estos dos archivos podrás instalar los módulos necesarios y crear el diagrama.
Paso 3: Creación del diagrama
Con el script de Python escrito, puedes ejecutarlo para crear el diagrama.
Comience instalando los requisitos con Pip:
- pip3 install -r requirements.txt
Verás un resultado como este:
OutputCollecting diagrams==0.21.1 Using cached diagrams-0.21.1-py3-none-any.whl (23.8 MB)Collecting graphviz==0.16 Using cached graphviz-0.16-py2.py3-none-any.whl (19 kB)Requirement already satisfied: jinja24.0,=2.10 in /usr/lib/python3/dist-packages (from diagrams==0.21.1--r requirements.txt (line 1)) (2.10.1)Installing collected packages: graphviz, diagramsSuccessfully installed diagrams-0.21.1 graphviz-0.16
Cuando se instalen los requisitos, ejecute el script de Python:
- python3 my-diagram.py
Este script generará un diagrama llamado my-diagram.png, que se verá así:
Para obtener más información sobre los diferentes tipos de íconos y otras formas de utilizar este módulo, puede leer la documentación de Mingrammer .
En este paso, creaste el diagrama. A continuación, lo agregarás a tu almacenamiento de objetos para poder acceder al .pngarchivo.
Paso 4: Cargar el diagrama al almacenamiento de objetos
Para ver el diagrama desde diferentes lugares, ahora deberá cargarlo en el almacenamiento de objetos. Para este tutorial, utilizará un depósito de DigitalOcean Spaces.
Durante los requisitos previos, configuró un depósito de espacios y creó un conjunto de claves de acceso .
A continuación, instale s3cmd, que es una herramienta para interactuar con las API de estilo s3 desde la CLI:
- sudo apt install -y s3cmd
Después de la instalación, configure s3cmd:
- s3cmd --configure
Ahora, deberá configurar la configuración utilizando sus credenciales de API y otras preferencias. Cada mensaje que se muestra a continuación se cargará como una línea propia, por lo que debe actualizar las secciones resaltadas con su información y opciones:
OutputHTTP Proxy server name:New settings:Access Key: your-access-keySecret Key: your-secret-keyDefault Region: EUS3 Endpoint: ams3.digitaloceanspaces.comDNS-style bucket+hostname:port template for accessing a bucket: %(bucket)s.ams3.digitaloceanspaces.comEncryption password: your-encryption-passwordPath to GPG program: /usr/bin/gpgUse HTTPS protocol: TrueHTTP Proxy server name:HTTP Proxy server port: 0
Debe S3 Endpointcoincidir con el que se proporciona en la configuración de Spaces y tener DNS-styleun formato similar. El ejemplo anterior se utiliza ams3porque este depósito de Spaces está alojado en el centro de datos 3 de Ámsterdam. Actualice el suyo en consecuencia.
Una vez que haya configurado sus preferencias, seleccione Yprobar las credenciales:
OutputTest access with supplied credentials? [Y/n] Y
La prueba se ejecutará. Si falla, puede proporcionar nuevas credenciales para la configuración e intentarlo nuevamente. Una vez que se complete correctamente, verá la siguiente pantalla:
OutputPlease wait, attempting to list all buckets...Success. Your access key and secret key worked fine :-)Now verifying that encryption works...Success. Encryption and decryption worked fine :-)
Ahora puedes cargar el archivo ejecutando el s3cmdcomando:
- s3cmd put my-diagram.png s3://your_space_name/my-diagram.png
Cuando tu diagrama haya terminado de cargarse, verás una pantalla como esta:
Outputupload: 'my-diagram.png' - 's3://your-space-name/my-diagram.png' [1 of 1] 43672 of 43672 100% in 0s 1516.98 kB/s done
Si su depósito es de acceso público o ha hecho público el diagrama, puede visitarlo para verlo. Asegúrese de actualizar la URL con el nombre de su depósito y su centro de datos.https://your-space-name.ams3.digitaloceanspaces.com/my-diagram.png
Si su depósito no es de acceso público, puede cambiar los permisos del archivo para hacerlo público o puede descargar la imagen desde su depósito a su computadora local.
Si no necesita conservar los servidores y el almacenamiento de objetos creados durante este tutorial, puede seguir la documentación sobre cómo eliminar Droplets y destruir Spaces .
Conclusión
Ha creado un diagrama con Python, que puede modificar para todas sus necesidades futuras de creación de diagramas. Ya no necesitará arrastrar cuadros para crear un diagrama manualmente. También cargó el diagrama recién creado en un depósito de Spaces en DigitalOcean.
Para ver qué más puede hacer con la herramienta Diagramas, visite la documentación de introducción a Diagrama como código .
También puede explorar su infraestructura de DigitalOcean con nuestra documentación de referencia de API .