LoginSignup
1
2

More than 3 years have passed since last update.

Diagramsを用いて構成図を描いてみた

Last updated at Posted at 2020-11-05

はじめに

構成図を描くのに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

作成された図

test.png

最後に

構成図を描くだけであればdraw.ioとかでも問題ないですが、コードとしてGitで管理できるのは良い点だと思いました。ただ、欲しい画像がまだ無かったり、複雑なもの(AZやECSのタスク等々)を描きたい時は使いづらい感じでしたので、今後の更新とともに色々と試していこうかなと思います。

参考

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2