注意: 虽然 JavaScript 对于本网站不是必需的,但您与内容的互动将受到限制。请开启 JavaScript 以获得完整的体验。

使用 Python 构建开源跨平台 Azure CLI

背景

Microsoft Azure 是一个云计算平台,在全球拥有五十多个数据中心,提供数百种服务。作为一个大型云服务,客户拥有最好的工具来部署和管理他们的系统至关重要。

从一开始,我们就为开发人员、管理员和架构师提供了各种工具和库,以执行各种操作:从在虚拟网络中启动虚拟机到部署带有 PostgreSQL 数据库的 Web 应用。当然,最受欢迎的工具之一是 Azure“az”命令行界面。为了构建这个开源工具,它包含数千条命令以及第三方扩展,我们转向了 Python。

Azure CLI

为什么选择 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 使我们能够设计一个在所有平台上看起来和感觉都像原生工具的工具,它在任何地方都运行一致,足以满足交互式使用的性能,支持强大的可扩展性,并帮助我们的客户无论他们打算实现什么都能取得成功。