タダです.
皆さん,普段システムの構成図ってどうやって管理していますか?Excel や PowerPoint,専用のツールを使われていたり色々な方法で管理されているのですが,以前 PlantUML の形式で作図できる「AWS-PlantUML」を紹介させてもらいました.
今回も同じコードでの作図ですが Python で記述できるツールの「Diagrams」を紹介します.
Diagrams の概要
「Diagrams」は Python でクラウドサービスのアーキテクチャを作図するツールです.「Diagrams」では AWS のほか,Azure,GCP,Alibaba,Oracle Cloud のアイコンに対応しています.
このツールのメリットは,コードで構成図を管理するため変更の履歴追跡が可能になることです.そして,何より手で矢印やリソースのグルーピングを細かに弄らなくてもいいところです!僕は手で作図をしていて図の重なりで細かな調整をするのが面倒だと思ってしまいますが,その手間が何行かのコードで解決できます.
Diagrams の導入
「Diagrams」の導入は簡単です.pip
であれば次のコマンドで導入できます.また,Graphviz も必要なので適宜インストールしてください.
pip install diagrams
Diagrams での描画
「Diagrams」でどれくらいのコード量で作図ができるかを実際に2つの例でみていきます.
Web3層構造
1つ目のパターンとして Web の3層構造を AWS で構成するコード例です.
コード例
from diagrams import Diagram, Cluster from diagrams.aws.compute import AutoScaling,EC2 from diagrams.aws.network import ELB from diagrams.aws.database import RDS with Diagram("Scale-Out Computing", show=False): lb = ELB("LB") db = RDS("DB") with Cluster("Scaling Servers"): srv_group = [EC2("web01"), EC2("web02"), EC2("web03")] lb >> srv_group >> db
図を出力するためには次のようにコードを実行します.コードの実行が成功すると,コードと同じ階層に構成図がデフォルトですとpng
形式で生成されます.なお,形式は,svg
,jpg
,pdf
に対応しています.
python xxx.py
ELB で受けたトラフィックを3台までスケールする EC2 とデータを格納する RDS を表現してみました.10数行でこの絵を書けるのだから楽ですね.
サーバレスアーキテクチャ
2つ目の例としてサーバーレスアーキテクチャを作図してみます.題材として「実践 AWS CDK - TypeScript でインフラもアプリも!」で扱った感情分析システムのワークフローのコード例です.
コード例
from diagrams import Diagram, Cluster from diagrams.onprem.client import User from diagrams.aws.storage import S3 from diagrams.aws.integration import SF,SNS from diagrams.aws.compute import Lambda from diagrams.aws.ml import Comprehend from diagrams.aws.compute import Compute with Diagram("Osenchi Architecture", show=False): with Cluster("Osenchi WorkFlow"): with Cluster("State Machine"): wf = SF("Step Functions") with Cluster("Send E-mail"): wf >> SNS("Email Topic") >> User("Client") with Cluster("Delete Object"): wf >> Lambda("Delete Objects Functions")>>S3("Input") with Cluster("Call DetectStatement API"): wf >> Lambda("Call Comprehend Functions") >> Comprehend("DetectStatement API") >> S3("Ouput") User("Client") >> S3("Input") >> wf
出力された図が次のものです.
Clustes
を使うことで関連処理のグループ化が可能です.ワークフローで呼び出す各処理を1つずつグループ化していくとワークフローの作図もできます.
まとめ
「Diagrams」いかがでしたでしょうか? Pythonに慣れていて手での作図にモヤモヤしている人に有用なツールと思います.主要なクラウドサービスだけでなく,オンプレミスのリソース表現もあります.AWS 観点で行くとアイコンも最新になっているし,構成図もコードで管理できれば履歴の管理もし易いと感じました.興味を持った人はぜひ「Diagrams」使ってみて欲しいです!