🐈

Python diagrams を触ってみた

2022/07/26に公開約2,400字

システム構成図のお絵描き用に Python diagrams を触ってみました。
本当に少しだけ。お触り程度です・・・

環境

  • python 3.7

  • diagrams

https://diagrams.mingrammer.com/docs/getting-started/installation
  • graphviz

http://www.graphviz.org/download/

各用語

  • Diagram

    描画する図のクラス。図の全体的な設定を行う。

  • Nodes

    ノードのクラス。サーバやサービスのアイコン図等の描画を行う。

  • Cluster

    ノードをグループ化するクラス。これを使って、VCNやサブネットを表現。

  • Edge

    ノード間の接続線。

試してみる

ドキュメントのExsampleを読みつつ、簡単なコードを書いて試してみます。
今回はOracle cloud用のモジュールを使ってみます。

from diagrams import Cluster, Diagram
from diagrams.oci.compute import VM
from diagrams.oci.storage import FileStorage as FS
from diagrams.oci.network import LoadBalancer as LB
from diagrams.oci.network import InternetGateway as IGW
from diagrams.onprem.client import Users as USER


def miso_system():
	with Diagram("miso_system", filename="miso_system", direction='TB', show=False):
		with Cluster("miso_system VPC (10.1.2.0/24)"):
			igw = IGW("InterNet Gate way")
			fs = FS("File System")

			with Cluster("Public Subnet (10.1.2.0/28)"):
				lb = LB("Load Balancer\nVIP:xxx.xxx.xxx.xxx\nnode1:10.1.2.4\nnode2:10.1.2.5")

				with Cluster("Private Subnet-01 (10.1.2.16/29)"):
					web_servers01 = [VM("web-miso002\nIP:10.1.2.18"), VM("web-miso001\nIP:10.1.2.17")]

				with Cluster("Private Subnet-02 (10.1.2.24/29)"):
					web_servers02 = [VM("web-miso004\nIP:10.1.2.26"), VM("web-miso003\nIP:10.1.2.25")]

		USER("Customer") >> igw >> lb
		lb >> web_servers01
		lb >> web_servers02
		web_servers01 - fs
		web_servers02 - fs


if __name__ == '__main__':
	miso_system()

実行結果

  • directionで方向を変えてみます。
direction='TB' ⇒ direction='LR'

実行結果

[graph, node] の色、[edge] の形状を変更してみます。

以下を追記して、

graph_attr = {
	'bgcolor': 'black',
	'fontsize': '28',
}

node_attr = {
	'fontcolor': 'red',
	'fontsize': '15'
}

edge_attr = {
	'arrowhead': 'open',
	'arrowsize': '5.5',
	'penwidth': '2.0',
	'color': 'blue'
}

Diagramに引数として渡してみます。

def miso_system():
	with Diagram("miso_system", filename="miso_system", direction='LR', show=False,
	             graph_attr=graph_attr, node_attr=node_attr, edge_attr=edge_attr):

実行結果

いい感じにダサい色彩になり、私好みです。
カスタマーに侵略される質素味噌システム感が出ました。

Discussion

ログインするとコメントできます