ネットワーク図をコード化する(Diagrams)
https://diagrams.mingrammer.com/ というツールがあるのを見かけたので試してみます。
Diagramsとは
これです!
About Diagrams
Diagrams lets you draw the cloud system architecture in Python code.
環境
- unbuntu on WSL2
準備
Diagramsをインストールします。
python -m venv sample_diagrams
cd sample_diagrams
. bin/activate
pip install diagrams
実装
サンプルをそのままやってもいいんですが、今回はChatGPTにお願いしてみます。
ChatGPTへ依頼
- 依頼内容
- 回答
diagrams
はPythonで書かれたコードを使って、さまざまなクラウドプロバイダーやサービスのアーキテクチャ図を生成するためのライブラリです。ご依頼の内容に基づいて、AzureのApplication Gatewayが2台のVMに接続している構成の図を生成するコードを作成します。
まず、diagrams
ライブラリを使うためにはPython環境が必要です。また、diagrams
をインストールしていない場合は、pip install diagrams
を実行してインストールしてください。以下に、AzureのApplication Gatewayが2台のVMに接続している構成を表すコードを記載します。
from diagrams import Diagram
from diagrams.azure.network import ApplicationGateway
from diagrams.azure.compute import VM
with Diagram("Azure Application Gateway to VMs", show=False, direction="TB"):
gateway = ApplicationGateway("Application Gateway")
vm1 = VM("VM 1")
vm2 = VM("VM 2")
gateway >> vm1
gateway >> vm2
このコードは、Azure Application Gateway to VMs
という名前のアーキテクチャ図を生成します。図では、Application Gatewayが中央に配置され、それが2台のVM (VM 1
と VM 2
) に接続されている構造を示しています。show=False
は生成された図を自動で表示しないように設定しています。表示させたい場合は、このオプションを削除またはTrue
に設定してください。
このコードを実行する前に、diagrams
とGraphvizがインストールされていることを確認してください。Graphvizはdiagrams
で図を描画するのに必要なツールです。未インストールの場合は、公式のインストールガイドに従ってインストールしてください。
生成された図は、スクリプトを実行したディレクトリにazure_application_gateway_to_vms.png
というファイル名で保存されます。このファイルを開くことで、作成したアーキテクチャ図を確認できます。
ふむふむ
実装
そのまま書いてみます。
from diagrams import Diagram
from diagrams.azure.network import ApplicationGateway
from diagrams.azure.compute import VM
with Diagram("Azure Application Gateway to VMs", show=False, direction="TB"):
gateway = ApplicationGateway("Application Gateway")
vm1 = VM("VM 1")
vm2 = VM("VM 2")
gateway >> vm1
gateway >> vm2
実行
python diagram.py
すると以下のエラーが出ました。何々?
-> % python diagram.py
Traceback (most recent call last):
File "/home/tsaeki/Develop/sample_diagrams/lib/python3.12/site-packages/graphviz/backend/execute.py", line 81, in run_check
proc = subprocess.run(cmd, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tsaeki/.pyenv/versions/3.12.2/lib/python3.12/subprocess.py", line 548, in run
with Popen(*popenargs, **kwargs) as process:
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tsaeki/.pyenv/versions/3.12.2/lib/python3.12/subprocess.py", line 1026, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/home/tsaeki/.pyenv/versions/3.12.2/lib/python3.12/subprocess.py", line 1953, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: PosixPath('dot')
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/tsaeki/Develop/sample_diagrams/diagram.py", line 5, in <module>
with Diagram("Azure Application Gateway to VMs", show=False, direction="TB"):
File "/home/tsaeki/Develop/sample_diagrams/lib/python3.12/site-packages/diagrams/__init__.py", line 164, in __exit__
self.render()
File "/home/tsaeki/Develop/sample_diagrams/lib/python3.12/site-packages/diagrams/__init__.py", line 198, in render
self.dot.render(format=self.outformat, view=self.show, quiet=True)
File "/home/tsaeki/Develop/sample_diagrams/lib/python3.12/site-packages/graphviz/_tools.py", line 171, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/home/tsaeki/Develop/sample_diagrams/lib/python3.12/site-packages/graphviz/rendering.py", line 122, in render
rendered = self._render(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/tsaeki/Develop/sample_diagrams/lib/python3.12/site-packages/graphviz/_tools.py", line 171, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/home/tsaeki/Develop/sample_diagrams/lib/python3.12/site-packages/graphviz/backend/rendering.py", line 324, in render
execute.run_check(cmd,
File "/home/tsaeki/Develop/sample_diagrams/lib/python3.12/site-packages/graphviz/backend/execute.py", line 84, in run_check
raise ExecutableNotFound(cmd) from e
graphviz.backend.execute.ExecutableNotFound: failed to execute PosixPath('dot'), make sure the Graphviz executables are on your systems' PATH
Graphviz
がないっぽい・・てかChatGPTが説明してるし。すみません・・・
このコードを実行する前に、
diagrams
とGraphvizがインストールされていることを確認してください。Graphvizはdiagrams
で図を描画するのに必要なツールです。未インストールの場合は、公式のインストールガイドに従ってインストールしてください。
Graphviz
をインストールして改めて実行
sudo apt-get update
sudo apt-get install graphviz
python diagram.py
出力
すると、azure_application_gateway_to_vms.png
という画像が生成されていました。
確認してます。
できました。いいですね。
感想
ネットワーク図をhttps://www.drawio.com/ で作ってましたが、コード化できると管理しやすいですね。今度機会があったら使ってみよう。
Discussion