はじめに
構成図を描くのにdraw.ioを使っていたのですが、diagramsというツールを使えばコードで描けるとのことだったので試してみました。
環境
- Mac OS Catalina
- Docker for Mac
ファイル構造
├── Dockerfile
└── test.py
Dockerイメージをつくる
ドキュメントにはpython3.6以上かつ、Graphvizをインストールしておいてとあるので、そのようにDockerfileを作成。(今回はalpineを使ってみたかったのでalpineで作成しました。)
FROM python:3.8-alpine
WORKDIR /app
RUN apk add --update --no-cache \
graphviz \
ttf-freefont \
curl \
bash
# フォントの追加
RUN curl -O https://noto-website.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip \
&& mkdir -p /usr/share/fonts/noto \
&& unzip NotoSansCJKjp-hinted.zip -d /usr/share/fonts/noto/ \
&& fc-cache -fv \
&& rm NotoSansCJKjp-hinted.zip
RUN pip install diagrams
あとは作成したDockerfileをビルドする。
タグはご自由に!今回はdiagrams
とします。
$ docker build -t diagrams .
ファイルを準備する
公式ドキュメントを参考にしながら、ファイルを作成します。
from diagrams import Cluster, Diagram
from diagrams.aws.compute import ECS
from diagrams.aws.database import ElastiCache, Aurora
from diagrams.aws.network import ELB
from diagrams.aws.network import Route53
with Diagram("Test", show=False):
dns = Route53("dns")
lb = ELB("ALB")
api = ECS("API")
redis = ElastiCache("redis")
with Cluster("DB Cluster"):
db_test = Aurora("test")
db_test - [Aurora("test ro")]
dns >> lb >> api
api >> db_test
api >> redis
db_test >> redis
構成図を出力する
今回はDockerを用いているので以下のようにコンテナを起動して、コマンドを実行します。
docker run --rm -v `pwd`:/app diagrams python test.py
実行後、png
ファイルが追加されます。
├── Dockerfile
├── test.png
└── test.py
作成された図
最後に
構成図を描くだけであればdraw.ioとかでも問題ないですが、コードとしてGitで管理できるのは良い点だと思いました。ただ、欲しい画像がまだ無かったり、複雑なもの(AZやECSのタスク等々)を描きたい時は使いづらい感じでしたので、今後の更新とともに色々と試していこうかなと思います。