作者选择了 Diversity in Tech Fund以作为 Write for Donations计划的一部分接受捐款。
介绍
Diagram as Code工具允许您创建基础设施的架构图。您可以重复使用代码、测试、集成和自动化图表绘制过程,这将允许您将文档视为代码,并构建导线来绘制基础设施。
在本教程中,您将创建Python中的基本图表,并将其上传到对象存储桶中. 完成后,您将了解图表
脚本是如何工作的,使您能够创建新的集成。
前提条件
要遵循本教程,您将需要:
- Ubuntu 20.04 服务器,带有非根用户,您可以通过跟随 [初始服务器设置与 Ubuntu 20.04] (https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-20-04)来设置. 此教程中的例子来自运行在 DigitalOcean 上的 Ubuntu 20.04 服务器.
- [Python 3] (https://www.python.org/download/releases/3.0/) 版本3.6或更高安装在您的机器上,您可以和[如何安装Python 3的第1步并设置一个编程环境在一个 Ubuntu 20.04 服务器上] (https://andsky.com/tech/tutorials/how-to-install-python-3-and-set-up-a-programming-environment-on-an-ubuntu-20-04-server)一起设置.
- 数字海洋账户。 如果没有,则签入新账户。
- 数字海洋Space,用于存储带有访问密钥的数据,您可以通过跟踪我们的Spaces productions来设置. .
步骤 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
的图表,它看起来像这样:
有关不同类型的图标和其他使用此模块的方式的更多信息,您可以阅读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 基础设施。