工作と競馬2

電子工作、プログラミング、木工といった工作の記録記事、競馬に関する考察記事を掲載するブログ

Pythonでコーディングしてクラウドシステムの構成図が描けるDiagramsを試した

概要


Pythonでコーディングしてクラウドシステムの構成図が描けるDiagramsを試してみた。


背景と目的


半年前ぐらいに、Pythonでコーディングしてクラウドシステムの構成図が描けるDiagramsというものがあるのを知った。

dev.classmethod.jp

しかし、なかなか余裕がなく試す機会がなかった。年末年始休みで少し余裕ができたので、試しに使ってみる。


詳細


0. 参考情報

1. インストール

私の環境は、Windows10。

1.1 Diagramsのインストール

本家ドキュメントに従い、pipでインストール。

pip install diagrams

1.2 Graphvizのインストール

次に、Graphvizhttps://www.graphviz.org/download/からダウンロードして、

C:\

に配置。そして、ユーザー環境変数のPathに、以下を追加。

C:\Graphviz\bin


2. 描いてみる

とりあえず、簡単なシステム図を書いてみる。コードは以下。

# coding: utf-8

from diagrams import Diagram, Cluster
from diagrams.aws.compute import Lambda
from diagrams.aws.storage import S3
from diagrams.aws.network import APIGateway
from diagrams.aws.integration import Eventbridge
from diagrams.generic.device import Mobile

with Diagram('クラウドシステム'):

    client = Mobile("クライアントアプリ")

    with Cluster("AWS"):

        api = APIGateway("sampleapi")

        evn = Eventbridge("タイマー\nsample_event")

        client >> api

        with Cluster("Lambda"):
            
            lmb1 = Lambda("メイン処理の関数\nlambda_main")
            lmb2 = Lambda("バックアップ処理の関数\nlambda_backup")

            api >> lmb1
            evn >> lmb2

        with Cluster('samplebucket'):

            with Cluster("SampleDirectory"):
    
                total = S3("sample1.json")
                records = S3("sample2.json")
                budget = S3("sample3.json")

                with Cluster("backup"):

                    datelog = S3("{%Y-%m-%d}/")

                    lmb2 >> datelog

                lmb1 >> [records, total, budget]
                lmb2 >> [records, total, budget]

出力結果が以下。コンポーネントの配置、線のつながりとも、いい感じに出力できている。

f:id:dekuo-03:20210101133011p:plain

3. 解像度を調整する

2で描いたものは解像度がずいぶん低い。これをどうにかできないかと調べたところ、Diagramコンテキストを宣言する際に、Graphvizのオプションのdpiを与えることで調整できることが分かった。以下のように、graph_attrという引数で与える。

graph_attr = {
    "dpi": "192"
}

with Diagram('クラウドシステム', graph_attr=graph_attr):

改めて出力した結果が以下。解像度が上がってきれいになっている。

f:id:dekuo-03:20210101133015p:plain


まとめと今後の課題


コードでキチっと描けるのはとても気持ちいい。これからどんどん使っていきたいと思った。