「Diagramsを使ってPythonでシステム構成図を描く | Developers.IO」の記事をみて良さそうだなーと思ったのだけどPython環境がなかったのでDockerで試してみた話。
Dockerイメージを準備する
公式ドキュメントに「pip
でdiagrams
をインストールせよ、Graphviz
もインストールしておけ」と書かれているのでそれにしたがってDockerfileを作成。
FROM python:latest
WORKDIR /app
RUN apt update && \
apt install -y python3-pygraphviz && \
pip install diagrams
ビルドする。あとで実行しやすいようにdiagrams
という名前のDockerイメージにしておく。
$ docker build -t diagrams .
これでdiagrams:latest
のDockerイメージの作成が完了。
Diagramsのファイルを準備する
公式のQuickstartのファイルを用意してみる。
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("userdb")
割と直感的に意味がわかるけど、より詳しくは公式ドキュメントを参照。公式ドキュメント英語だけどシンプルで分量も少ないから読みやすい。あとExamplesがわかりやすい。
Diagramsを実行する
公式ドキュメントによるとローカルにPython環境があれば、$ python diagram.py
で実行できるとのこと。
今回はDockerコンテナを使うので、diagram.py
を作成したカレントディレクトリをボリュームマウントして、python diagram.py
のコマンドを実行すればOKです。
現在カレントディレクトリはこんな感じ。
$ ls
Dockerfile diagram.py
コンテナを実行する。
$ docker run --rm -v `pwd`:/app diagrams python diagram.py
もう一回ls
するとpng
ファイルが生成されている。
$ ls
Dockerfile diagram.py web_service.png
web_service.png
の中身を確認してみる。
$ open web_service.png
まとめ
Dockerを使って簡単にDiagramsを試すことができました。
Examplesをやってみたり自分で作りたいように構成図を作ってみたりしましたが、「コードで管理できる」「シンプルで見やすい」「Node(アイコンみたいなやつ)も豊富」といいこと尽くしです。
一方で痒いところとしては、複雑になってくると「Nodeの配置そこじゃねぇよ!」ってなったりするし、ClusterをまたぐClusterは書けないみたいなので「異なるAZのインスタンスに同じセキュリティグループを適用」みたいなことは表現しにくいなぁという感じでした。
どちらにせよ、試してみる価値ありかと思います〜。