使用Python通過代碼創(chuàng)建圖表的詳細(xì)步驟
簡介
Diagram as Code 工具允許您創(chuàng)建基礎(chǔ)架構(gòu)的架構(gòu)圖。您可以重復(fù)使用代碼、測試、集成和自動化繪制圖表的過程,這將使您能夠?qū)⑽臋n視為代碼,并構(gòu)建用于映射基礎(chǔ)架構(gòu)的流水線。您可以使用 diagrams 腳本與許多云提供商和自定義基礎(chǔ)架構(gòu)。
在本教程中,您將使用 Python 創(chuàng)建一個基本的圖表,并將其上傳到對象存儲桶。完成后,您將了解 diagrams 腳本的工作原理,從而能夠創(chuàng)建新的集成。
步驟 1 — 安裝 Graphviz
在這一步中,您將安裝 Graphviz 工具。Graphviz 是 diagrams 模塊的引擎,它生成圖表本身。
首先,更新服務(wù)器的軟件包:
sudo apt update
然后,使用以下命令安裝 Graphviz:
sudo apt install -y graphviz
-y 選項(xiàng)會自動回答安裝過程中的任何額外提示。您也可以下載其他發(fā)行版的 Graphviz。
安裝完成后,您將擁有安裝的 Graphviz。
因?yàn)槟鷮⒃诒窘坛毯竺媸褂?Pip3 安裝 Python 依賴項(xiàng),您可以檢查您是否有正確的版本:
pip3 --version
您應(yīng)該會看到類似以下的內(nèi)容:
pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)
在這一步中,您更新了服務(wù)器,安裝了 Graphviz,并檢查了 Pip 的版本。接下來,您將構(gòu)建 diagrams 腳本。
步驟 2 — 構(gòu)建 Python 腳本
在這一步中,您將在 Python 中編寫一個示例圖表腳本。
首先,創(chuàng)建一個工作文件夾:
mkdir ~/my-diagram
創(chuàng)建項(xiàng)目文件夾后,使用以下命令進(jìn)入該文件夾:
cd ~/my-diagram
然后,創(chuàng)建一個 requirements.txt 文件以跟蹤項(xiàng)目依賴項(xiàng):
echo -e "diagrams==0.21.1\ngraphviz==0.16" | tee requirements.txt
此命令有兩個關(guān)鍵字:echo 將打印字符串,-e 選項(xiàng)將使用 \n 插入來解析新行,以創(chuàng)建一個格式良好的 requirements 文件。
| 符號表示將 echo 語句的結(jié)果傳遞給管道。tee 命令接受管道輸入,并根據(jù)列出的參數(shù)創(chuàng)建一個新文件:在本例中,是 requirements.txt。
Python 中的 requirements.txt 文件提供了運(yùn)行腳本所需的模塊列表。目前,該項(xiàng)目有兩個依賴項(xiàng)。
創(chuàng)建文件后,您將看到以下輸出:
diagrams=0.21.1 graphviz=0.16
此顯示指示了兩個工具的版本號。
現(xiàn)在,您將編寫 Python 腳本以創(chuàng)建圖表圖像。
確保您仍在創(chuàng)建的目錄中:
cd ~/my-diagram
接下來,使用 nano 或您喜歡的文本編輯器打開一個新文件:
nano my-diagram.py
添加以下代碼:
from diagrams import Diagram, Cluster, Edge
此行將導(dǎo)入創(chuàng)建通用圖表元素所需的圖表部件。
接下來,您必須導(dǎo)入繪制您將構(gòu)建的 DigitalOcean 基礎(chǔ)架構(gòu)所需的內(nèi)容。在本示例中,您將創(chuàng)建一個圖表,顯示兩個 Droplets 連接到一個數(shù)據(jù)庫,并且所有主機(jī)都將日志發(fā)送到一個 Logstash 實(shí)例。
添加以下行以導(dǎo)入 Droplet、DbaasPrimary 和 Logstash 圖標(biāo):
... from diagrams.digitalocean.compute import Droplet from diagrams.digitalocean.database import DbaasPrimary from diagrams.elastic.elasticsearch import Logstash
這些行導(dǎo)入了本教程所需的圖標(biāo)。您可以在 Mingrammer 文檔中找到所有可用的 DigitalOcean 圖標(biāo)。
導(dǎo)入圖標(biāo)后,您可以開始構(gòu)建圖表。此代碼部分將創(chuàng)建一個名為 My Diagram: Droplets 的圖表:
...
with Diagram("My Diagram: Droplets", show=False, filename="my-diagram", direction="LR"):
show 參數(shù)可以在創(chuàng)建時打開它,但由于您正在使用 Linux 主機(jī),它已設(shè)置為 False。生成的文件將被命名為分配給 filename 的任何字符串。direction 是您希望圖表打印的方向。direction 的支持值為 TB(從上到下)和 LR(從左到右)。選擇 direction 可以使圖表更易于閱讀。對于此圖表,您將使用 LR。
最后,將圖標(biāo)添加到圖表中:
...
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")
Cluster 在圖表中為您的 Droplets 創(chuàng)建一個框,顯示它們在名為 DigitalOcean 的空間中。Droplet、DbaasPrimary 和 Logstash 將創(chuàng)建以字符串提供的圖標(biāo)名稱。
接下來,您將通過添加以下行來在圖表中的各個項(xiàng)目之間創(chuàng)建依賴關(guān)系:
...
[droplet1, droplet2] >> db >> [droplet1, droplet2]
[droplet1, droplet2, db] >> Edge(color="firebrick", style="dashed") >> logstash
您將您的 Droplets 連接到上面創(chuàng)建的 DbaasPrimary 數(shù)據(jù)庫,既讀又寫。然后,您添加了一個顏色為 firebrick 的虛線,以指示從 Droplets 和主數(shù)據(jù)庫到 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
保存并關(guān)閉文件。
現(xiàn)在,您在同一個文件夾中有一個名為 my-diagram.py 和一個名為 requirements.txt 的文件。
有了這兩個文件,您可以安裝所需的模塊并創(chuàng)建圖表。
步驟 3 — 創(chuàng)建圖表
完成編寫 Python 腳本后,您可以運(yùn)行它以創(chuàng)建圖表。
首先使用 Pip 安裝所需的庫:
pip3 install -r requirements.txt
您將看到以下輸出:
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
安裝完成所需的庫后,運(yùn)行 Python 腳本:
python3 my-diagram.py
此腳本將生成一個名為 my-diagram.png 的圖表,如下所示:
!The Droplets and Database diagram
有關(guān)不同類型圖標(biāo)和使用此模塊的其他方法的更多信息,請參閱 Mingrammer 文檔。
在這一步中,您已創(chuàng)建了圖表。接下來,您將把它添加到對象存儲中,以便可以訪問 .png 文件。
步驟 4 — 將圖表上傳到對象存儲
為了能夠從不同位置查看您的圖表,現(xiàn)在將圖表上傳到對象存儲。在本教程中,您將使用 DigitalOcean Spaces 存儲桶。
在先決條件中,您已設(shè)置了一個 Spaces 存儲桶并創(chuàng)建了一組訪問密鑰。
接下來,安裝 s3cmd,這是一個用于通過 CLI 與 s3 風(fēng)格 API 進(jìn)行交互的工具:
sudo apt install -y s3cmd
安裝完成后,配置 s3cmd:
s3cmd --configure
現(xiàn)在,您將使用 API 憑據(jù)和其他首選項(xiàng)設(shè)置配置。下面的每個提示將作為自己的行加載,因此請使用您的信息和選擇更新下面的突出顯示部分:
HTTP 代理服務(wù)器名稱: 新設(shè)置: 訪問密鑰:your-access-key 密鑰:your-secret-key 默認(rèn)區(qū)域:EU S3 端點(diǎn):ams3.digitaloceanspaces.com 用于訪問存儲桶的 DNS 樣式主機(jī)名+端口模板:%(bucket)s.ams3.digitaloceanspaces.com 加密密碼:your-encryption-password GPG 程序路徑:/usr/bin/gpg 使用 HTTPS 協(xié)議:True HTTP 代理服務(wù)器名稱: HTTP 代理服務(wù)器端口:0
S3 端點(diǎn) 需要與 Spaces 設(shè)置中提供的端點(diǎn)匹配,并且 DNS 樣式 需以類似格式的方式設(shè)置。上面的示例使用 ams3,因?yàn)榇?Spaces 存儲桶托管在阿姆斯特丹數(shù)據(jù)中心 3 上。請相應(yīng)更新您的設(shè)置。
設(shè)置完首選項(xiàng)后,選擇 Y 來測試憑據(jù):
使用提供的憑據(jù)測試訪問權(quán)限?[Y/n] Y
測試將運(yùn)行。如果失敗,您可以提供新的憑據(jù)進(jìn)行配置并重試。一旦成功,您將看到以下顯示:
請稍候,嘗試列出所有存儲桶... 成功。您的訪問密鑰和密鑰工作正常 :-) 現(xiàn)在驗(yàn)證加密是否有效... 成功。加密和解密工作正常 :-)
現(xiàn)在,您可以通過運(yùn)行 s3cmd 命令上傳文件:
s3cmd put my-diagram.png s3://your_space_name/my-diagram.png
上傳完成后,您將看到以下顯示:
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
如果您的存儲桶是公開訪問的,或者您已將圖表設(shè)置為公開,您可以訪問 https://your-space-name.ams3.digitaloceanspaces.com/my-diagram.png 查看您的圖表。請確保使用您的存儲桶名稱和其數(shù)據(jù)中心更新 URL。
如果您的存儲桶不是公開訪問的,您可以更改文件權(quán)限使其公開,或者您可以從存儲桶下載圖像到本地計算機(jī)。
如果您不需要保留在本教程中創(chuàng)建的服務(wù)器和對象存儲,您可以按照文檔中有關(guān)刪除 Droplets 和銷毀 Spaces 的說明進(jìn)行操作。
結(jié)論
您已使用 Python 創(chuàng)建了一個圖表,您可以根據(jù)需要修改它以滿足您未來的圖表創(chuàng)建需求。您將不再需要手動拖動框來創(chuàng)建圖表。
到此這篇關(guān)于使用Python通過代碼創(chuàng)建圖表的文章就介紹到這了,更多相關(guān)Python創(chuàng)建圖表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python基礎(chǔ)教程之Pandas數(shù)據(jù)分析庫詳解
Pandas是一個基于 NumPy 的非常強(qiáng)大的開源數(shù)據(jù)處理庫,它提供了高效、靈活和豐富的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具,本文中,我們將學(xué)習(xí)如何使用Pandas來處理和分析數(shù)據(jù),感興趣的小伙伴跟著小編一起來看看吧2023-07-07
Python turtle庫繪制菱形的3種方式小結(jié)
今天小編就為大家分享一篇Python turtle庫繪制菱形的3種方式小結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
不同版本中Python matplotlib.pyplot.draw()界面繪制異常問題的解決
這篇文章主要給大家介紹了關(guān)于不同版本中Python matplotlib.pyplot.draw()界面繪制異常問題的解決方法,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-09-09
Flask框架學(xué)習(xí)筆記(一)安裝篇(windows安裝與centos安裝)
Flask是一個輕量級的Web應(yīng)用框架, 使用Python編寫。Flask也被稱為 “microframework” ,因?yàn)樗褂煤唵蔚暮诵?,?extension 增加其他功能。2014-06-06
python實(shí)現(xiàn)批量提取指定文件夾下同類型文件
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)批量提取指定文件夾下同類型文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-04-04
Python中os.path.dirname和os.path.basename的實(shí)現(xiàn)
文件路徑處理是一個常見的任務(wù),本文主要介紹了Python中os.path.dirname和os.path.basename的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04
Python自動化處理Excel數(shù)據(jù)的操作過程
在實(shí)際數(shù)據(jù)處理和分析過程中,經(jīng)常會遇到需要從大量數(shù)據(jù)中提取出特定日期范圍內(nèi)的信息的需求,本文將介紹如何使用Python的pandas庫來處理Excel文件,感興趣的朋友跟隨小編一起看看吧2023-11-11

