Diagrams as Code 用程式碼產生架構圖

2020-06-11 Github, Software

最近看到的一個開源專案 diagrams 覺得蠻有趣的,現在這個時代什麼東西都要 XX as Code 而 diagrams 就是一個為了架構圖而生的 as code framework。

diagrams 本身是基於 graphviz 而生的,使用 Python 3.6 以上的版本,可以撰寫簡單的 Python Code 產生架構圖,因為潮所以花了一些時間做了一個 Side Project

diagrams Example

aws architecture

要先安裝 diagrams 和 graphviz,以 macOS 為例:

$ pip install diagrams
$ brew install graphviz

diagrams 有支援大部分類型的 icon,詳細可以參考 diagrams – AWS

# content of aws_simple_architecture.py
from diagrams import Diagram, Cluster, Edge
from diagrams.aws.compute import EC2
from diagrams.aws.database import Aurora, DDB
from diagrams.aws.network import VPC, CF, ELB, InternetGateway, NATGateway
from diagrams.aws.storage import S3

先定義這張 architecture diagram 以及有什麼物件:

# content of aws_simple_architecture.py
with Diagram("AWS Simple Architecture", show=False, outformat="png"):
    cf = CF("CloudFront")

diagrams.Diagram 支援 graph_attr, node_attr, edge_attr 參數,分別對應 Graphviz Node, Edge and Graph Attributes,有幾個常用的 attributes:

"bgcolor": "transparent" # 透明底圖
"fontsize": "30" # 文字大小

在 architecture 又把 VPC 分為 Private/Public Subnet 分別放 EC2, ALB, Aurora:

# content of aws_simple_architecture.py
    with Cluster("VPC"):
        with Cluster("Private Subnet"):

            with Cluster("App"):
                servers_group = [EC2("app1"), EC2("app2"), EC2("app3")]

            with Cluster("Aurora Cluster"):
                aurora_writer = Aurora("Writer")
                aurora_writer - Aurora("Reader")

        with Cluster("Public Subnet"):

            elb = ELB("ALB")
            igw = InternetGateway("IGW")

            bastion = EC2("Bastion") >> Edge(label="login") >> servers_group[0]

當物件定義好後,可以用 >>, <<, - 把全部的物件串連起來,如果需要針對線條做改變或標示文字可以用 Edge 處理

# content of aws_simple_architecture.py
    cf >> igw >> elb >> servers_group
    servers_group[0] >> aurora_writer

在這邊會看到 server_group 只指定 [0] 這個 EC2,原因是如果把 server_group array 整個指到 aurora_writer 就會多非常多線:

從上圖的範例可以看到,當開始複雜化之後 diagrams 會開始偏離你「喜愛」的圖,會慢慢變得複雜,甚至線會亂跑 … 這是現在這個 framework 的問題。

完成後直接執行就會產出 diagram 架構圖

$ python aws_simple_architecture.py

結論是,diagrams 本身並不適合太複雜的圖,以目前的演算法自動 layout 並沒有辦法產生人類「喜歡」的圖,但是對於比較簡單的架構圖 diagrams 算是非常好上手,as code 就是便於交接、文件化以及版控是非常好的概念。

同場加映更多關於 diagram 的工具:Online text to diagram tools

給 Mr. 沙先生一點建議

彙整

分類

展開全部 | 收合全部

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱