Python 代码来绘制云系统架构图 - Diagrams
·

💡 核心理念:Diagram as Code
Diagrams 的核心思想是让你像写代码一样定义架构图 。它的主要优势在于:
- 快速原型设计:无需使用复杂的图形设计工具,即可快速勾勒新系统的架构 。
- 版本控制友好:架构图的定义变成了文本文件,可以像管理代码一样,用 Git 等工具追踪每一次修改 。
- 图标丰富:内置了
AWS、Azure、GCP、Kubernetes、阿里云等主流云服务商的官方图标集,也支持On-Premise(本地部署)、SaaS和主流编程框架的节点 。
请注意:Diagrams 仅用于绘制架构图,它不会操作任何真实的云资源,也不会生成 CloudFormation 或 Terraform 代码 。
🔧 安装与配置
安装 Diagrams 分为两步,需要确保环境满足要求。
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1. 环境检查 | python --version |
需要 Python 3.7 或更高版本 。 |
| 2. 安装 Graphviz | macOS: brew install graphviz Ubuntu/Debian: sudo apt-get install graphviz Windows: 从 官网 下载安装,或使用包管理工具如 choco install graphviz 。 |
Graphviz 是底层的渲染引擎,必须安装 。 |
| 3. 安装 Diagrams | pip install diagrams |
使用 pip 安装 Python 库。 |
🚀 基础用法:绘制第一张图
创建一个 Python 文件(例如 web_service.py),写入以下代码 :
from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB
# 使用 with 语句创建一个图上下文
# show=False 表示不自动打开图片,outformat 可以指定输出格式
with Diagram("简单Web服务", show=False, outformat="png"):
# 使用 >> 操作符定义节点流向:负载均衡 -> 应用服务器 -> 数据库
ELB("入口") >> EC2("应用") >> RDS("数据库")
在终端运行 python web_service.py,即可在当前目录生成 simple_web_service.png 文件。
🔗 核心概念与高级特性
掌握基础后,可以通过这些核心概念构建更复杂的架构图。
1. 节点 (Nodes) 与连接
- 节点:图的组成部分,通过
提供商.服务类型.节点名的方式导入,如from diagrams.aws.compute import EC2。 - 连接操作符 :
>>:从左到右连接。<<:从右到左连接。-:连接,不表示方向。
- 节点组:可以将多个节点放入一个 Python 列表
[]中,实现一对多的连接,例如ELB("lb") >> [EC2("web1"), EC2("web2")]。
2. 集群 (Clusters)
- 使用
Cluster可以将逻辑上相关的节点圈在一起,形成视觉上的分组,非常适合表示服务集群或子网 。 - 集群支持无限嵌套,可以构建复杂的层次结构 。
示例:带集群的架构
from diagrams import Cluster, Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB
with Diagram("集群示例", show=False):
lb = ELB("负载均衡")
with Cluster("应用层集群"): # 定义一个集群
web集群 = [EC2("web1"), EC2("web2")]
with Cluster("数据层"):
db主 = RDS("主数据库")
db从 = RDS("从数据库")
db主 >> db从 # 主从关系
lb >> web集群 >> db主
3. 边 (Edges) 与样式定制
你可以通过 Edge 对象或直接在连接时传递参数,来定制连线的颜色、样式和标签 。
from diagrams import Diagram, Edge
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
with Diagram("样式定制", show=False):
EC2("应用") >> Edge(color="firebrick", style="dashed", label="数据流") >> RDS("数据库")
此外,你还可以在 Diagram 初始化时,通过 graph_attr、node_attr 和 edge_attr 参数,传递 Graphviz 的 DOT 属性,实现全局样式自定义,例如设置透明背景、字体等 。
4. 布局方向 (Direction)
通过 direction 参数可以控制图的整体流向 :
TB:从上到下 (Top to Bottom)BT:从下到上LR:从左到右 (Left to Right,默认)RL:从右到左
💡 最佳实践与常见问题
为了让你的架构图更专业,可以参考以下建议:
- 节点命名:使用
功能-环境-角色的格式,如EC2("用户认证服务-prod"),提高可读性 。 - 集群嵌套:嵌套深度建议不超过 3 层,避免图表过于复杂 。
- 中文显示问题:如果节点名称为中文且显示为乱码,需要在
graph_attr中指定一个支持中文的字体,例如"SimHei"或"Microsoft YaHei"。graph_attr = {"fontname": "SimHei"} with Diagram("中文标题", graph_attr=graph_attr, show=False): EC2("应用服务器") # 节点名也能正常显示中文 - 版本控制:记得将
.py源文件纳入 Git 管理,实现架构即代码 。
🌍 谁在用 Diagrams?
Diagrams 已经被一些知名的开源项目采用,证明了它的实用性 :
- Apache Airflow:在其文档中用于生成架构图。
- Cloudiscovery:帮助用户分析云上资源,并基于 Diagrams 绘制出云基础设施的拓扑图。
- Airflow Diagrams:一个 Airflow 插件,用于可视化 DAG 所依赖的云服务。
📚 扩展学习
- 官方文档:可以访问 diagrams.mingrammer.com 查看完整的节点列表和更多示例。
- 其他语言:如果你是 Go 语言开发者,可以试试 go-diagrams 。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)