[PYTHON] J'ai essayé de dessiner un diagramme de configuration à l'aide de diagrammes

introduction

J'ai utilisé draw.io pour dessiner le diagramme de configuration, mais j'ai entendu dire qu'il pouvait être dessiné avec du code en utilisant un outil appelé diagrammes, alors je l'ai essayé.

environnement

Structure des fichiers

├── Dockerfile
└── test.py

Créer une image Docker

Documentation a python3.6 ou supérieur et Graphviz installé. Puisqu'il y en a, j'ai créé un Dockerfile comme ça. (Je voulais utiliser alpin cette fois, alors je l'ai créé avec alpin.)

FROM python:3.8-alpine

WORKDIR /app
RUN apk add --update --no-cache \
    graphviz \
    ttf-freefont \
    curl \
    bash

#Ajouter une police
RUN curl -O https://noto-website.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip \
    && mkdir -p /usr/share/fonts/noto \
    && unzip NotoSansCJKjp-hinted.zip -d /usr/share/fonts/noto/ \
    && fc-cache -fv \
    && rm NotoSansCJKjp-hinted.zip

RUN pip install diagrams

Après cela, créez le Dockerfile créé. N'hésitez pas à marquer! Cette fois, appelons cela des «diagrammes».

$ docker build -t diagrams .

Préparez le dossier

Créez le fichier en vous référant au Document officiel.

from diagrams import Cluster, Diagram
from diagrams.aws.compute import ECS
from diagrams.aws.database import ElastiCache, Aurora
from diagrams.aws.network import ELB
from diagrams.aws.network import Route53

with Diagram("Test", show=False):
    dns = Route53("dns")
    lb = ELB("ALB")
    api = ECS("API")
    redis = ElastiCache("redis")

    with Cluster("DB Cluster"):
        db_test = Aurora("test")
        db_test - [Aurora("test ro")]

    dns >> lb >> api
    api >> db_test
    api >> redis
    db_test >> redis

Sortir le diagramme de configuration

Puisque nous utilisons Docker cette fois, démarrez le conteneur comme suit et exécutez la commande.

docker run --rm -v `pwd`:/app diagrams python test.py

Après l'exécution, le fichier png sera ajouté.

├── Dockerfile
├── test.png
└── test.py

Figure créée

test.png

finalement

Si vous dessinez simplement un diagramme de configuration, il n'y a pas de problème avec draw.io, mais je pense que c'est un bon point que vous puissiez le gérer avec Git comme code. Cependant, quand je n'avais pas l'image que je voulais, ou quand je voulais dessiner des choses compliquées (AZ, tâches ECS, etc.), c'était difficile à utiliser, donc je pense que je vais essayer diverses choses avec les futures mises à jour.

référence

Recommended Posts

J'ai essayé de dessiner un diagramme de configuration à l'aide de diagrammes
J'ai écrit un diagramme de configuration du système avec des diagrammes sur Docker
J'ai essayé d'automatiser [une certaine tâche] à l'aide d'une tarte à la râpe
J'ai créé un éditeur de texte simple en utilisant PyQt
J'ai essayé de créer un linebot (implémentation)
J'ai essayé d'utiliser Azure Speech to Text.
J'ai essayé d'obtenir une base de données sur les courses de chevaux en utilisant Pandas
J'ai essayé de créer un linebot (préparation)
Comment dessiner un graphique avec Matplotlib
J'ai essayé de créer une expression régulière de "montant" en utilisant Python
J'ai essayé de jouer au jeu ○ ✕ en utilisant TensorFlow
J'ai essayé de créer une expression régulière de "temps" en utilisant Python
J'ai essayé de créer une expression régulière de "date" en utilisant Python
J'ai essayé de classer le texte en utilisant TensorFlow
J'ai essayé d'obtenir une liste de noms AMI en utilisant Boto3
J'ai essayé de créer une application todo en utilisant une bouteille avec python
J'ai créé une API Web
J'ai essayé d'utiliser pipenv, alors prenez note
J'ai essayé le diagramme en tant que code (diagrammes) qui peut gérer le code du diagramme de configuration
J'ai essayé d'effectuer une analyse de cluster de clients à l'aide des données d'achat
J'ai créé un exemple pour accéder à Salesforce en utilisant Python et Bottle
J'ai essayé de créer une méthode de super résolution / ESPCN
J'ai essayé de créer une méthode de super résolution / SRCNN ①
J'ai essayé de synthétiser des fichiers WAV en utilisant Pydub.
J'ai essayé d'utiliser Pythonect, un langage de programmation de flux de données.
J'ai essayé de lire un fichier CSV en utilisant Python
J'ai essayé d'utiliser la base de données (sqlite3) avec kivy
J'ai essayé d'utiliser paramétré
J'ai essayé d'utiliser argparse
J'ai essayé d'utiliser la mimesis
J'ai essayé d'utiliser anytree
J'ai essayé d'utiliser aiomysql
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser Pipenv
J'ai essayé d'utiliser matplotlib
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser ESPCN
J'ai essayé d'utiliser openpyxl
J'ai essayé d'utiliser Ipython
J'ai essayé de déboguer.
J'ai essayé d'utiliser ngrok
J'ai essayé d'utiliser face_recognition
J'ai essayé d'utiliser Jupyter
J'ai essayé d'utiliser doctest
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser la fenêtre de temps
[Python] Deep Learning: J'ai essayé d'implémenter Deep Learning (DBN, SDA) sans utiliser de bibliothèque.
J'ai essayé de créer un BOT de traduction qui fonctionne avec Discord en utilisant googletrans
J'ai essayé de faire MAP rapidement une personne suspecte en utilisant les données d'adresse Geolonia
Dessine un graphique avec Julia ... j'ai essayé une petite analyse
J'ai essayé de faire un "putain de gros convertisseur de littérature"
J'ai essayé d'implémenter un pseudo pachislot en Python