如何使用 "图表即代码 "在 Python 中创建图表

作者选择了 Diversity in Tech Fund以作为 Write for Donations计划的一部分接受捐款。

介绍

Diagram as Code工具允许您创建基础设施的架构图。您可以重复使用代码、测试、集成和自动化图表绘制过程,这将允许您将文档视为代码,并构建导线来绘制基础设施。

在本教程中,您将创建Python中的基本图表,并将其上传到对象存储桶中. 完成后,您将了解图表脚本是如何工作的,使您能够创建新的集成。

前提条件

要遵循本教程,您将需要:

步骤 1 — 安装 Graphviz

在此步骤中,您将安装 Graphviz 工具。 Graphviz图表模块的引擎,它会生成图表本身。

首先,更新您的服务器的包:

1sudo apt update

然后用这个命令安装 Graphviz:

1sudo apt install -y graphviz

-y 选项为安装过程中涉及的任何额外提示提供了自动的,您也可以 下载 Graphviz for other distributions

安装完成后,您将安装 Graphviz。

由于您将在教程中稍后使用Pip3来安装Python依赖,您可以检查是否有正确的版本:

1pip3 --version

你应该看到这样的东西:

1[secondary_label Output]
2pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)

在此步骤中,您更新了您的服务器,安装了 Graphviz,并检查了您的Pip版本。

步骤 2 — 构建 Python 脚本

在此步骤中,您将在Python中写一个示例图形脚本。

首先,创建一个文件夹以在:

1mkdir ~/my-diagram

创建项目文件夹后,使用此命令进入该文件夹:

1cd ~/my-diagram

然后,创建一个requirements.txt文件来跟踪项目依赖:

1echo -e "diagrams==0.21.1\ngraphviz==0.16" | tee requirements.txt

这个命令有两个关键字:‘echo’将打印字符串,而‘-e’选项将用‘\n’插入到一个精心格式的 要求文件中解析新的行。

tee命令从管道中获取输入,并从中创建一个新的文件,根据列出的参数命名:在这种情况下,requirements.txt

Python中的requirements.txt文件提供了成功运行脚本所需的模块列表,目前这个项目有两种依赖性。

1[secondary_label Output]
2diagrams=0.21.1
3graphviz=0.16

此显示显示了这两个工具的版本号。

现在,你会写Python脚本来创建图像。

请确保您仍在您创建的目录中:

1cd ~/my-diagram

接下来,使用nano或您最喜欢的文本编辑器打开新文件:

1nano my-diagram.py

添加以下代码:

1[label my-diagram.py]
2from diagrams import Diagram, Cluster, Edge

此行将导入创建通用图表元素所需的图表片。

在此示例中,您将创建一个图表,显示两个 Droplets 连接到数据库,所有主机将日志发送到一个 Logstash 实例。

添加以下行以导入 Droplet、DbaasPrimary 和 Logstash 图标:

1[label my-diagram.py]
2...
3from diagrams.digitalocean.compute import Droplet
4from diagrams.digitalocean.database import DbaasPrimary
5from diagrams.elastic.elasticsearch import Logstash

这些行导入本教程所需的图标. 您可以在 Mingrammer 文档中找到所有可用的 DigitalOcean 图标。

通过导入图标,您可以开始构建图表. 此代码部分将创建一个名为我的图表:滴滴的图表:

1[label my-diagram.py]
2...
3with Diagram("My Diagram: Droplets", show=False, filename="my-diagram", direction="LR"):

显示参数可在创建时打开,但已设置为,因为您在 Linux 主机上工作。生成的文件将被命名为文件名的字符串。方向是您想要打印图的方向。对方向的支持值为TB(顶部 -> 底部)和LR(左 -> 右)。

最后,添加图表中的图标:

 1[label my-diagram.py]
 2...
 3with Diagram("My Diagram: Droplets", show=False, filename="my-diagram", direction="LR"):
 4    with Cluster("DigitalOcean"):
 5        droplet1 = Droplet("My first Droplet")
 6        droplet2 = Droplet("My second Droplet")
 7
 8    db = DbaasPrimary("My database")
 9
10    logstash = Logstash("Logstash service")

Cluster在图表中创建一个围绕您的Droplets的框,显示一个名为DigitalOcean的空间。

接下来,您将通过添加这些行来创建图表中的各种项目之间的依赖:

1[label my-diagram.py]
2...
3    [droplet1, droplet2] >> db >> [droplet1, droplet2]
4    [droplet1, droplet2, db] >> Edge(color="firebrick", style="dashed") >> logstash

您将您的 Droplets 连接到上面创建的 DbaasPrimary 数据库,无论是阅读还是写作,然后,您在颜色firebrick中添加一行条,以表示从 Droplets 和主 DB 到 Logstash 的连接。

您的最终my-diagram.py文件将看起来像这样:

 1[label my-diagram.py]
 2from diagrams import Diagram, Cluster, Edge
 3from diagrams.digitalocean.compute import Droplet
 4from diagrams.digitalocean.database import DbaasPrimary
 5from diagrams.elastic.elasticsearch import Logstash
 6
 7with Diagram("My Diagram: Droplets", show=False, filename="my-diagram", direction="LR"):
 8    with Cluster("DigitalOcean"):
 9        droplet1 = Droplet("My first droplet")
10        droplet2 = Droplet("My second droplet")
11
12    db = DbaasPrimary("My database")
13
14    logstash = Logstash("Logstash service")
15
16    [droplet1, droplet2] >> db >> [droplet1, droplet2]
17    [droplet1, droplet2, db] >> Edge(color="firebrick", style="dashed") >> logstash

保存并关闭文件。

你现在有一个名为my-diagram.py的文件和一个名为requirements.txt的文件在同一个文件夹中。

使用这两个文件,您可以安装所需的模块并创建图表。

步骤 3 — 创建图表

有了 Python 脚本,你可以运行它来创建图表。

开始使用Pip安装要求:

1pip3 install -r requirements.txt

你会看到这样的输出:

1[secondary_label Output]
2Collecting diagrams==0.21.1
3  Using cached diagrams-0.21.1-py3-none-any.whl (23.8 MB)
4Collecting graphviz==0.16
5  Using cached graphviz-0.16-py2.py3-none-any.whl (19 kB)
6Requirement 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)
7Installing collected packages: graphviz, diagrams
8Successfully installed diagrams-0.21.1 graphviz-0.16

安装要求后,运行 Python 脚本:

1python3 my-diagram.py

此脚本将生成名为my-diagram.png的图表,它看起来像这样:

The Droplets and Database diagram

有关不同类型的图标和其他使用此模块的方式的更多信息,您可以阅读Mingrammer文档(https://diagrams.mingrammer.com/docs/getting-started/examples)。

在此步骤中,您创建了图表,然后将其添加到对象存储中,以便您可以访问.png 文件。

步骤4 —将您的图表上传到对象存储

要查看您的图表从不同的位置,您现在将上传图表到对象存储. 对于本教程,您将使用DigitalOcean Spaces桶。

在前提条件下,你 设置一个空间桶创建了一组访问密钥

接下来,安装 s3cmd,这是从 CLI 与 s3 风格 API 进行交互的工具:

1sudo apt install -y s3cmd

安装后,配置 s3cmd:

1s3cmd --configure

您现在将使用您的 API 凭证和其他偏好设置配置。下面的每个提示将作为自己的行加载,因此更新所突出的部分以您的信息和选择:

 1[secondary_label Output]
 2HTTP Proxy server name:
 3
 4New settings:
 5Access Key: your-access-key
 6Secret Key: your-secret-key
 7Default Region: EU
 8S3 Endpoint: ams3.digitaloceanspaces.com
 9DNS-style bucket+hostname:port template for accessing a bucket: %(bucket)s.ams3.digitaloceanspaces.com
10Encryption password: your-encryption-password
11Path to GPG program: /usr/bin/gpg
12Use HTTPS protocol: True
13HTTP Proxy server name:
14HTTP Proxy server port: 0

S3 终端需要与您在Spaces设置中提供的DNS-style相似格式相匹配。上面的样本使用ams3,因为这个Spaces桶位于阿姆斯特丹数据中心 3。

一旦设置了您的偏好,请选择Y来测试凭证:

1[secondary_label Output]
2Test access with supplied credentials? [Y/n] Y

测试将运行. 如果失败,您可以为配置提供新的凭证,然后再试一次.一旦成功,您将看到以下显示:

1[secondary_label Output]
2Please wait, attempting to list all buckets...
3Success. Your access key and secret key worked fine :-)
4
5Now verifying that encryption works...
6Success. Encryption and decryption worked fine :-)

现在你可以通过运行s3cmd命令来上传文件:

1s3cmd put my-diagram.png s3://your_space_name/my-diagram.png

当您的图表完成上传后,您将看到这样的显示:

1[secondary_label Output]
2upload: 'my-diagram.png' -> 's3://your-space-name/my-diagram.png'  [1 of 1]
3 43672 of 43672 100% in 0s 1516.98 kB/s done

如果您的图表是公开可用的,或者您已经公开了图表,您可以访问 https://your-space-name.ams3.digitaloceanspaces.com/my-diagram.png 查看您的图表. 请确保更新 URL 以您的图表和其数据中心的名称。

如果您的桶不能公开访问,您可以 更改文件权限使其公开,或者您可以从桶下载图像到本地计算机。

如果您不需要在本教程中创建的服务器和对象存储,您可以遵循 删除滴滴破坏空间的文档。

结论

您使用Python创建了一个图表,您可以对所有未来的图表创建需求进行修改。您将不再需要拖拉框来手动创建图表。

若要查看您可以使用图表工具做的其他事情,请访问 图表作为代码开始文档

您也可以通过我们的 API 参考文档来探索您的 DigitalOcean 基础设施。

Published At
Categories with 技术
comments powered by Disqus