Azure 云 Shell
在本课中,了解 Azure 云 Shell。
Azure 提供了多种与资源交互的方式,包括 Azure 门户、Azure SDK、命令行工具等。在本课程中,我们将重点介绍命令行方式。
尽管你可以完全通过图形用户界面(GUI)来管理 Azure,但这违背了 DevOps 的一个重要原则:自动化。即使你现在还没有进行自动化操作,使用命令行也能为后续的脚本编写和自动化打下基础。
PowerShell 与 Azure CLI
在本课程中,我们将重点关注两种用于管理和自动化 Azure 的命令行工具:Azure CLI 和 PowerShell。原因如下:Azure CLI 是跨平台(Windows 和 Linux)操作 Azure 的常用方式,而许多管理员已经熟悉 PowerShell。这两种工具都能很好地通过命令行管理 Azure,但也存在一些细微差异。
两者有许多共同点,通常可以完成相同的操作,甚至还能结合使用。每种工具都有其独特的与 Azure 交互的方式。但对作者而言,关键在于以下两个问题:
- 你是否只是临时打开终端,手动执行命令并响应交互式提示?
- 你需要将多个命令集成到脚本中,实现流程自动化吗?
当然,这两种工具之间还有其他区别,也都支持交互式资源管理和脚本开发。但从直觉上讲,将一种“脚本语言”视为比命令行工具更擅长脚本编写的工具是合理的。
Azure Cloud Shell
在深入讨论 PowerShell 与 Azure CLI 的区别之前,我们先来了解一个便捷的 Azure 服务:Cloud Shell。Azure Cloud Shell 是一项在浏览器中提供命令行接口的服务。它让你可以直接访问 PowerShell 和 Bash 环境。
在 Cloud Shell 中,PowerShell、Bash 或 Azure CLI 都已预装,你可以轻松地用来管理 Azure 资源,无需在本地安装任何前置依赖,也不受操作系统限制。
Cloud Shell 通过启动一个临时主机,并从指定的存储账户读取配置信息来提供命令行体验。与本地环境不同的是,Cloud Shell 在闲置 20 分钟后会自动超时断开,这可能会带来一定不便。
本章将使用 Cloud Shell 来演示如何通过 PowerShell 和 Azure CLI 管理 Azure。如果你希望跟随示例、项目并获得与截图完全一致的效果,建议使用我们在平台上为你预先配置好的 Cloud Shell 环境。
注意:你仍然可以使用本地的 PowerShell 或命令行工具运行 Azure PowerShell 或 Azure CLI。Cloud Shell 的优势在于工具已预装,并且会自动登录你的 Azure 订阅。
首次设置 Cloud Shell
首次使用 Azure Cloud Shell 时,系统会提示你创建一些依赖资源,例如资源组、存储账户 和 Azure 文件共享。这些资源用于保存你的 $HOME 目录内容。
请注意,设置 Cloud Shell 时会创建一个存储账户,该账户会产生实际费用,请参考 存储定价详情。
开始前,请访问 shell.azure.com 并登录你的 Azure 订阅。认证成功后,系统会提示你创建存储账户,如下图所示。你可以直接点击 创建存储,让服务自动完成所有配置。
如果希望对创建内容有更多控制权,可点击 显示高级设置。如下图所示,你可以自定义各项配置选项。
确认配置无误后,点击 创建存储,Cloud Shell 将自动创建或使用所需资源。
使用 Cloud Shell
存储配置完成后,你将进入 Bash 命令行界面。你会注意到当前处于 Bash 环境。
在下方终端中输入 az,你会发现 Azure CLI 已经安装完毕。
此后,你就可以像在本地一样开始使用 Azure CLI。这也是本章项目中 Azure CLI 部分的起点。
但如果你需要使用 PowerShell 呢?
在下方终端中输入 pwsh,即可切换到 PowerShell 环境。你可以随时在这两种环境之间切换。Cloud Shell 会在后台同时保持 Bash 和 PowerShell 会话的运行。
Azure PowerShell 模块和 Azure PowerShell 提供程序均已预装。Cloud Shell 默认会通过 Azure PowerShell 驱动器 将你置于 Azure 订阅的根目录下,你可以方便地浏览和管理各个订阅。
顺便提一下,在 PowerShell 环境中,你可以使用 Enter-AzVm 和 Invoke-AzVmCommand 直接连接到 Azure 虚拟机,执行交互式 PowerShell 远程命令,无需配置防火墙或其他网络设置。
此外,Cloud Shell 还预装了 Git、Pester 等常用工具,详见官方文档中的功能说明。