🙆

ネットワーク図をコード化する(Diagrams)

2024/03/15に公開

https://diagrams.mingrammer.com/ というツールがあるのを見かけたので試してみます。

Diagramsとは

これです!

About Diagrams
Diagrams lets you draw the cloud system architecture in Python code.

環境

  • unbuntu on WSL2

準備

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

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 1VM 2) に接続されている構造を示しています。show=Falseは生成された図を自動で表示しないように設定しています。表示させたい場合は、このオプションを削除またはTrueに設定してください。

このコードを実行する前に、diagramsとGraphvizがインストールされていることを確認してください。Graphvizはdiagramsで図を描画するのに必要なツールです。未インストールの場合は、公式のインストールガイドに従ってインストールしてください。

生成された図は、スクリプトを実行したディレクトリにazure_application_gateway_to_vms.pngというファイル名で保存されます。このファイルを開くことで、作成したアーキテクチャ図を確認できます。

ふむふむ

実装

そのまま書いてみます。

diagram.py
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