https://diagrams.mingrammer.com/
Normalerweise verwende ich Authoring-Tools wie Cacoo für das Konfigurationsdiagramm. Ich habe versucht zu sehen, wie viel ich mit einem Tool schreiben kann, das ein Konfigurationsdiagramm mit Python-Code zeichnen kann.
――Da es einfach geschrieben werden kann, ist es gut, schnell ein neues System prototypisieren zu können, wenn es angepriesen wird. ――Die Lernkosten sind niedrig und Sie können mit dem Schreiben beginnen, sobald Sie mit Python vertraut sind.
Erstellen Sie eine neue virtuelle Umgebung und installieren Sie Pakete darin. Dieses Verfahren ist optional.
python -m venv ~/envs/diagrams
source ~/envs/diagrams/bin/activate
Installation
https://diagrams.mingrammer.com/docs/getting-started/installation
#Mit Homebrew installieren
brew install graphviz
#Mit pip installieren
pip install diagrams
Vorerst habe ich versucht, anhand eines Beispiels auszugeben.
from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB
with Diagram("Web Service", show=False):
ELB("lb") >> EC2("web") >> RDS("db")
python diagram.py
2020-05-29 13:50:05.901 +[__NSCFConstantString length]: unrecognized selector sent to class 0x
2020-05-29 13:50:05.905 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[__NSCFConstantString length]: unrecognized selector sent to class 0x'
Ich bin sofort auf einen Fehler gestoßen. Ich kannte die Ursache überhaupt nicht und entschied mich daher, das ursprünglich vorerst installierte graphviz zu aktualisieren, um Probleme zu beheben.
brew upgrade graphviz
Sie haben die Version erfolgreich auf 2.40.1-> 2.44.0 aktualisiert.
python diagram.py
Ich konnte sicher ausgeben.
from diagrams import Cluster, Diagram
from diagrams.aws.compute import EC2, ElasticBeanstalk
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB, Route53
from diagrams.onprem.client import Client
graph_attr = {
}
def draw():
with Diagram("web_service", show=False, graph_attr=graph_attr, direction="TB"):
route53 = Route53('route53')
client = Client('client')
client >> route53
with Cluster("ElasticBeanstalk"):
with Cluster("WEB"):
with Cluster("Subnet1"):
web1 = EC2("web")
lb1 = ELB("lb1")
lb1 >> web1
with Cluster("Subnet2"):
web2 = EC2("web")
lb2 = ELB("lb2")
lb2 >> web2
route53 - [lb1, lb2]
with Cluster("DB"):
db_master = RDS("master")
with Cluster("Subnet3"):
rds1 = RDS("slave1")
with Cluster("Subnet4"):
rds2 = RDS("slave2")
db_master - [rds1, rds2]
[web1, web2] >> db_master
if __name__ == '__main__':
draw()
Recommended Posts