如何使用 Python 通过代码创建图表
后台-插件-广告管理-内容页头部广告(手机) |
简介
Diagram as Code 工具允许您创建基础架构的架构图。您可以重复使用代码、测试、集成和自动化绘制图表的过程,这将使您能够将文档视为代码,并构建用于映射基础架构的流水线。您可以使用 diagrams 脚本与许多云提供商和自定义基础架构。
在本教程中,您将使用 Python 创建一个基本的图表,并将其上传到对象存储桶。完成后,您将了解 diagrams 脚本的工作原理,从而能够创建新的集成。
步骤 1 — 安装 Graphviz
在这一步中,您将安装 Graphviz 工具。Graphviz 是 diagrams 模块的引擎,它生成图表本身。
首先,更新服务器的软件包:
sudo apt update- 1
然后,使用以下命令安装 Graphviz:
sudo apt install -y graphviz- 1
-y 选项会自动回答安装过程中的任何额外提示。您也可以下载其他发行版的 Graphviz。
安装完成后,您将拥有安装的 Graphviz。
因为您将在本教程后面使用 Pip3 安装 Python 依赖项,您可以检查您是否有正确的版本:
pip3 --version- 1
您应该会看到类似以下的内容:
pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)- 1
在这一步中,您更新了服务器,安装了 Graphviz,并检查了 Pip 的版本。接下来,您将构建 diagrams 脚本。
步骤 2 — 构建 Python 脚本
在这一步中,您将在 Python 中编写一个示例图表脚本。
首先,创建一个工作文件夹:
mkdir ~/my-diagram- 1
创建项目文件夹后,使用以下命令进入该文件夹:
cd ~/my-diagram- 1
然后,创建一个 requirements.txt 文件以跟踪项目依赖项:
echo -e "diagrams==0.21.1\ngraphviz==0.16" | tee requirements.txt- 1
此命令有两个关键字:echo 将打印字符串,-e 选项将使用 \n 插入来解析新行,以创建一个格式良好的 requirements 文件。
| 符号表示将 echo 语句的结果传递给管道。tee 命令接受管道输入,并根据列出的参数创建一个新文件:在本例中,是 requirements.txt。
Python 中的 requirements.txt 文件提供了运行脚本所需的模块列表。目前,该项目有两个依赖项。
创建文件后,您将看到以下输出:
- 1
- 2
此显示指示了两个工具的版本号。
现在,您将编写 Python 脚本以创建图表图像。
确保您仍在创建的目录中:
cd ~/my-diagram- 1
接下来,使用 nano 或您喜欢的文本编辑器打开一个新文件:
nano my-diagram.py- 1
添加以下代码:
from diagrams import Diagram, Cluster, Edge- 1
此行将导入创建通用图表元素所需的图表部件。
接下来,您必须导入绘制您将构建的 DigitalOcean 基础架构所需的内容。在本示例中,您将创建一个图表,显示两个 Droplets 连接到一个数据库,并且所有主机都将日志发送到一个 Logstash 实例。
添加以下行以导入 Droplet、DbaasPrimary 和 Logstash 图标:
... from diagrams.digitalocean.compute import Droplet from diagrams.digitalocean.database import DbaasPrimary from diagrams.elastic.elasticsearch import Logstash- 1
- 2
- 3
- 4
这些行导入了本教程所需的图标。您可以在 Mingrammer 文档中找到所有可用的 DigitalOcean 图标。
导入图标后,您可以开始构建图表。此代码部分将创建一个名为 My Diagram: Droplets 的图表:
... with Diagram("My Diagram: Droplets", show=False, filename="my-diagram", direction="LR"):- 1
- 2
show 参数可以在创建时打开它,但由于您正在使用 Linux 主机,它已设置为 False。生成的文件将被命名为分配给 filename 的任何字符串。direction 是您希望图表打印的方向。direction 的支持值为 TB(从上到下)和 LR(从左到右)。选择 direction 可以使图表更易于阅读。对于此图表,您将使用 LR。
最后,将图标添加到图表中:
... with Diagram("My Diagram: Droplets", show=False, filename="my-diagram", direction="LR"): with Cluster("DigitalOcean"): droplet1 = Droplet("My first Droplet") droplet2 = Droplet("My second Droplet") db = DbaasPrimary("My database") logstash = Logstash("Logstash service")- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
Cluster 在图表中为您的 Droplets 创建一个框,显示它们在名为 DigitalOcean 的空间中。Droplet、DbaasPrimary 和 Logstash 将创建以字符串提供的图标名称。
接下来,您将通过添加以下行来在图表中的各个项目之间创建依赖关系:
... [droplet1, droplet2] >> db >> [droplet1, droplet2] [droplet1, droplet2, db] >> Edge(color="firebrick", style="dashed") >> logstash- 1
- 2
- 3
您将您的 Droplets 连接到上面创建的 DbaasPrimary 数据库,既读又写。然后,您添加了一个颜色为 firebrick 的虚线,以指示从 Droplets 和主数据库到 Logstash 的连接。
您的最终 my-diagram.py 文件将如下所示:
from diagrams import Diagram, Cluster, Edge from diagrams.digitalocean.compute import Droplet from diagrams.digitalocean.database import DbaasPrimary from diagrams.elastic.elasticsearch import Logstash with Diagram("My Diagram: Droplets", show=False, filename="my-diagram", direction="LR"): with Cluster("DigitalOcean"): droplet1 = Droplet("My first droplet") droplet2 = Droplet("My second droplet") db = DbaasPrimary("My database") logstash = Logstash("Logstash service") [droplet1, droplet2] >> db >> [droplet1, droplet2] [droplet1, droplet2, db] >> Edge(color="firebrick", style="dashed") >> logstash- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
保存并关闭文件。
现在,您在同一个文件夹中有一个名为 my-diagram.py 和一个名为 requirements.txt 的文件。
有了这两个文件,您可以安装所需的模块并创建图表。
步骤 3 — 创建图表
完成编写 Python 脚本后,您可以运行它以创建图表。
首先使用 Pip 安装所需的库:
pip3 install -r requirements.txt- 1
您将看到以下输出:
Collecting diagrams==0.21.1 Using cached diagrams-0.21.1-py3-none-any.whl (23.8 MB) Collecting graphviz==0.16 Using cached graphviz-0.16-py2.py3-none-any.whl (19 kB) Requirement already satisfied: jinja2<4.0,>=2.10 in /usr/lib/python3/dist-packages (from diagrams==0.21.1->-r requirements.txt (line 1)) (2.10.1) Installing collected packages: graphviz, diagrams Successfully installed diagrams-0.21.1 graphviz-0.16- 1
- 2
- 3
- 4
- 5
- 6
- 7
安装完成所需的库后,运行 Python 脚本:
python3 my-diagram.py- 1
此脚本将生成一个名为 my-diagram.png 的图表,如下所示:
!The Droplets and Database diagram
有关不同类型图标和使用此模块的其他方法的更多信息,请参阅 Mingrammer 文档。
在这一步中,您已创建了图表。接下来,您将把它添加到对象存储中,以便可以访问 .png 文件。
步骤 4 — 将图表上传到对象存储
为了能够从不同位置查看您的图表,现在将图表上传到对象存储。在本教程中,您将使用 DigitalOcean Spaces 存储桶。
在先决条件中,您已设置了一个 Spaces 存储桶并创建了一组访问密钥。
接下来,安装 s3cmd,这是一个用于通过 CLI 与 s3 风格 API 进行交互的工具:
sudo apt install -y s3cmd- 1
安装完成后,配置 s3cmd:
s3cmd --configure- 1
现在,您将使用 API 凭据和其他首选项设置配置。下面的每个提示将作为自己的行加载,因此请使用您的信息和选择更新下面的突出显示部分:
HTTP 代理服务器名称: 新设置: 访问密钥:your-access-key 密钥:your-secret-key 默认区域:EU S3 端点:ams3.digitaloceanspaces.com 用于访问存储桶的 DNS 样式主机名+端口模板:%(bucket)s.ams3.digitaloceanspaces.com 加密密码:your-encryption-password GPG 程序路径:/usr/bin/gpg 使用 HTTPS 协议:True HTTP 代理服务器名称: HTTP 代理服务器端口:0- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
S3 端点 需要与 Spaces 设置中提供的端点匹配,并且 DNS 样式 需以类似格式的方式设置。上面的示例使用 ams3,因为此 Spaces 存储桶托管在阿姆斯特丹数据中心 3 上。请相应更新您的设置。
设置完首选项后,选择 Y 来测试凭据:
使用提供的凭据测试访问权限?[Y/n] Y- 1
测试将运行。如果失败,您可以提供新的凭据进行配置并重试。一旦成功,您将看到以下显示:
请稍候,尝试列出所有存储桶... 成功。您的访问密钥和密钥工作正常 :-) 现在验证加密是否有效... 成功。加密和解密工作正常 :-)- 1
- 2
- 3
- 4
- 5
现在,您可以通过运行 s3cmd 命令上传文件:
s3cmd put my-diagram.png s3://your_space_name/my-diagram.png- 1
上传完成后,您将看到以下显示:
upload: 'my-diagram.png' -> 's3://your-space-name/my-diagram.png' [1 of 1] 43672 of 43672 100% in 0s 1516.98 kB/s done- 1
- 2
如果您的存储桶是公开访问的,或者您已将图表设置为公开,您可以访问 https://your-space-name.ams3.digitaloceanspaces.com/my-diagram.png 查看您的图表。请确保使用您的存储桶名称和其数据中心更新 URL。
如果您的存储桶不是公开访问的,您可以更改文件权限使其公开,或者您可以从存储桶下载图像到本地计算机。
如果您不需要保留在本教程中创建的服务器和对象存储,您可以按照文档中有关删除 Droplets 和销毁 Spaces 的说明进行操作。
结论
您已使用 Python 创建了一个图表,您可以根据需要修改它以满足您未来的图表创建需求。您将不再需要手动拖动框来创建图表。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |