Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

はじめに

構成図を描くのに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のタスク等々)を描きたい時は使いづらい感じでしたので、今後の更新とともに色々と試していこうかなと思います。

参考

gamu25
インフラに関することをメインに色々と勉強しています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away