[PYTHON] Générer des diagrammes d'architecture OCI à l'aide de diagrammes

Que sont les diagrammes

Diagrams est un OSS qui génère des fichiers pour divers diagrammes d'architecture en écrivant du code en Python. La version au moment de la publication de cet article est la 0.6.2.

Il est possible de générer des diagrammes d'architecture pour sur site, Kubernetes, AWS, Azure, GCP, Alibaba Cloud, ainsi qu'Oracle Cloud, et un mélange de ceux-ci. Cet article est basé sur OCI, mais l'utilisation de base est la même pour les diagrammes d'architecture autres que OCI, seuls les packages à importer sont différents. Le diagramme d'architecture généré sera différent de celui des différents standards du cloud, mais je pense qu'il est possible de réaliser une gestion de version du diagramme d'architecture basée sur "Diagram as Code", qui est également chanté sur le site d'origine. La licence est une licence MIT.

Site de diagrammes GitHub

Introduction de diagrammes

Introduction de Graphviz

Les diagrammes reposent sur un OSS appelé Graphviz pour représenter les diagrammes. Pour utiliser Diagrams, vous devez d'abord installer Graphviz. Si vous utilisez Homebrew sur votre Mac, vous pouvez l'installer avec brew install graph viz. Pour Windows, téléchargez et installez le logiciel à partir du site Graphviz. Transmettez également le chemin d'accès au chemin d'installation \ bin.

Introduction de diagrammes

Il peut être installé par pip install diagrams dans l'environnement de Python3.6 ou supérieur.

Exemple d'exécution et explication

Exemple de sortie de diagramme d'architecture

Cette fois, je vais sortir l'exemple suivant. Comme dans l'exemple, le japonais est également disponible. screenshot_20200224_124458.png

Échantillon de codage

sample.py


from diagrams import Cluster, Diagram
from diagrams.oci.compute import Vm as VM
from diagrams.oci.database import Databaseservice as DBCS
from diagrams.oci.network import Loadbalance as LB, Drg as DRG
from diagrams.oci.connectivity import Fastconnect as FC

with Diagram("Exemple de diagramme d'architecture OCI", outformat="pdf", filename="oci_sample", show=False):
    with Cluster("Sample VCN"):
        drg = DRG("DRG")
        with Cluster("Private Subnet"):
            lb = LB("Load Balancer")
            ap = [VM("Application\nServer2"), VM("Application\nServer1")]
            db = DBCS("Database Server")
    FC("FastConnect") >> drg >> lb >> ap >> db

Concept de base

Les diagrammes ont les concepts de base de diagramme, de nœud et de cluster. Diagram Une classe de diagrammes d'architecture. Étant donné que la classe Diagram prend en charge l'instruction with, elle peut être décrite comme un exemple. Vous trouverez ci-dessous une description des exemples d'arguments source.

--name: le premier argument. Le nom de l'argument est omis dans l'exemple de code. Spécifiez le titre du diagramme. --outformat: spécifiez le format du fichier de sortie. S'il n'est pas spécifié, la valeur par défaut est png. De plus, il prend en charge les formats jpg, svg et pdf. --filen: spécifiez le nom du fichier de sortie. S'il n'est pas spécifié, la valeur par défaut est le titre de la figure converti en minuscules. --show: utilisez booléen pour spécifier s'il faut afficher le fichier de sortie dans le visualiseur standard. La valeur par défaut est True.

Les arguments suivants peuvent être spécifiés en plus de ceux spécifiés dans l'exemple.

--direction: spécifiez la direction du flux. Les 4 types suivants peuvent être spécifiés. --LR: de gauche à droite (par défaut) --RL: de droite à gauche --TB: de haut en bas --BT: de bas en haut --graph_attr, node_attr, edge_attr: spécifiez respectivement le diagramme d'architecture, Node (décrit plus loin) et le format de bord au format JSON. Les contenus pouvant être spécifiés sont ceux pris en charge par Graphviz. Veuillez vous référer à Explication of Graphviz pour les détails du contenu qui peut être spécifié.

Node Une classe de nœuds (instances, services, etc.). Dans l'exemple de diagramme, les parties qui sont «DRG» ou «Serveur de base de données» sont applicables. Le nom d'objet de Node est au format "provider.resource type.name". Voir ici pour une liste de nœuds. Le seul argument est l'étiquette. --label: le nom de l'argument est omis dans l'exemple de code. Spécifiez le titre du nœud.

Cluster Une classe qui regroupe les nœuds. L'exemple de figure utilise Cluster pour représenter les VCN et les sous-réseaux. Il est également possible d'imbriquer des clusters comme le montre l'exemple de figure. Il n'y a pas de limite particulière au nombre de couches imbriquées. Il est également possible d'afficher plusieurs clusters dans la même hiérarchie. Voici une description des arguments. --label: premier argument. Le nom de l'argument est omis dans l'exemple de code. Spécifiez le titre du regroupement. S'il n'est pas spécifié, «cluster» s'affiche. --direction: identique à l'argument direction de Diagram.

Flux de codage

Fondamentalement, créez simplement une instance de Node à afficher dans l'instruction with de la classe Diagram, organisez-la dans l'ordre d'affichage et spécifiez la direction de la ligne reliant les nœuds. Spécifiez le cluster selon vos besoins et les nœuds appartenant au cluster seront créés dans l'instruction Cluster with. Il existe trois types de directions de ligne comme suit.

finalement

Dans l'ensemble, si vous êtes familier avec Python, vous le comprendrez probablement après un certain temps en regardant l'exemple de codage, à l'exception des explications des arguments. Au moment de la rédaction de l'article, il semble que la couverture des services pris en charge soit un peu faible, mais Diagrams est activement mis à jour et devrait encore évoluer.

Recommended Posts

Générer des diagrammes d'architecture OCI à l'aide de diagrammes
Générer une image Docker à l'aide de Fabric
Générer du code QR à l'aide du "qrcode" de Python