图表即代码
图表让你可以在 Python 代码中绘制云系统架构。它的诞生是为了在没有任何设计工具的情况下对新的系统架构设计进行原型设计。你还可以描述或可视化现有系统架构。Diagrams 目前支持主要的主要云供应商,包括:AWS, Azure, GCP, Kubernetes, Alibaba Cloud,Oracle Cloud等......它还支持On-Premise节点,SaaS以及主要的Programming框架和语言。
开源地址:https://github.com/mingrammer/diagrams
需要Python 3.6或更高版本,要使用[Graphviz]来呈现图表
brew install graphviz
choco install graphviz
pip install diagrams
生成一个简单的架构图
# diagram.py
from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB
with Diagram("Web Service", show=False):
ELB("lb") >> EC2("web") >> RDS("userdb")
from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB
from diagrams.aws.storage import S3
with Diagram("Web Services", show=False):
ELB("lb") >> EC2("web") >> RDS("userdb") >> S3("store")
ELB("lb") >> EC2("web") >> RDS("userdb") << EC2("stat")
(ELB("lb") >> EC2("web")) - EC2("web") >> RDS("userdb")
from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB
with Diagram("Workers", show=False, direction="TB"):
lb = ELB("lb")
db = RDS("events")
lb >> EC2("worker1") >> db
lb >> EC2("worker2") >> db
lb >> EC2("worker3") >> db
lb >> EC2("worker4") >> db
lb >> EC2("worker5") >> db
from diagrams import Cluster, Diagram, Node, Edge
from diagrams.k8s.compute import Pod
from diagrams.k8s.network import Ing
from diagrams.gcp.network import LoadBalancing
from diagrams.onprem.network import Nginx
with Diagram("Cluster nesting", show=False):
gcp_lb = LoadBalancing("GCP LB")
with Cluster("Kubernetes"):
with Cluster("Nginx"):
nginx= Nginx("")
with Cluster("MyApp"):
myapp_ing = Ing("")
with Cluster("Pods"):
myapp_pods = Pod("myapp")
with Cluster("MySQL"):
myapp_db = Pod("myapp-db")
gcp_lb >> Edge(headport="c", tailport="c", minlen="1", lhead='cluster_Kubernetes') >> nginx
nginx >> Edge(headport="c", tailport="c", minlen="1", lhead='cluster_MyApp') >> myapp_ing >> Edge(headport="c", tailport="c", minlen="1", lhead='cluster_MyApp pods') >> myapp_pods >> myapp_db
更多功能广大网友可以继续挖掘。