使用 Python 構建開源跨平臺 Azure CLI
背景
Microsoft Azure 是一個覆蓋全球五十多個資料中心的雲計算平臺,提供數百種服務。作為一個大型雲服務,客戶擁有用於部署和管理其系統的最佳工具至關重要。
從一開始,我們就為開發人員、管理員和架構師提供了各種工具和庫來執行各種操作:從在虛擬網路中啟動虛擬機器到部署帶有 PostgreSQL 資料庫的 Web 應用程式。當然,最受歡迎的工具之一是 Azure “az” 命令列介面。為了構建這個包含數千個命令以及第三方擴充套件的開源工具,我們選擇了 Python。
為什麼選擇 Python
最初,Azure 命令列體驗以 PowerShell 模組的形式提供給 Windows 使用者,並以基於 Node.js 的 CLI 的形式提供給包括使用 macOS 和 Linux 的使用者在內的所有人。然而,顯著的增長導致了難以解決的工程複雜性。
切換到 Python 使我們能夠產生一個在所有平臺上行為相同的實現。每個命令都是 用於 Python 的 Azure SDK 中的一個或多個函式的包裝器,這確保了開發人員可以使用相同的功能構建指令碼。一致的命令列約定使我們能夠為所有使用者提供一套說明。
由於 Python 易於在我們所有平臺上分發,我們可以提供符合正確約定的平臺特定軟體包。在 Windows 上,您可以使用包含所有必要元件的常規安裝程式。在 Linux 上,我們在許多發行版的儲存庫中提供軟體包,例如,Ubuntu 上的使用者可以使用 apt-get;在 macOS 上,我們推薦 Homebrew。遵循平臺約定讓我們的使用者相信該軟體是值得信賴的,而 Python 提供了提供它的靈活性。
Azure CLI 的功能
得益於 Python 的靈活性和強大的軟體包生態系統,Azure CLI 支援自動完成(在支援它的 shell 中)、持久憑據、JMESPath 結果解析、延遲初始化、無網路單元測試等功能。
大部分支援已抽象成一個名為 Knack 的開源軟體包,這使我們或任何其他人都可以將其用於他們自己的命令列工具。
對於 Azure CLI,我們啟用了可以使用 pip 安裝的擴充套件,以允許開發更復雜的工具,例如 自毀模式,該模式允許使用簡單的命令列引數在一定時間後自動刪除任何資源。能夠擁有一個擴充套件生態系統使我們的使用者能夠開發適合其偏好的工作流程。
由於 Azure 同時支援多個 API 版本以及本地 Azure Stack 部署,因此 Azure CLI 必須能夠根據其連線的版本調整其命令。得益於 Python 中工具的可組合架構,我們可以根據可用性在執行時輕鬆新增或刪除命令。結果是不會建議使用者使用無效的命令或引數,即使在處理較舊的部署時也可以自由更新命令列工具。
結論
Microsoft Azure 提供數百種服務,每種服務都提供多種相容版本和許多命令。透過一個響應迅速、有幫助且易於使用的命令列工具來展示這種複雜性是一項挑戰。
使用 Python 開發 Azure CLI 使我們能夠構建一個在所有平臺上看起來和感覺都像原生的工具,可以在任何地方一致執行,效能足以進行互動式使用,支援強大的可擴充套件性,並幫助我們的客戶無論他們打算實現什麼都取得成功。