Azure CLI 是一种命令行工具,可用于配置和管理来自许多 shell 环境的 Azure 资源。 选择首选 shell 环境并安装 Azure CLI 后,请使用本文来发现有关如何避免常见陷阱并成功使用 Azure CLI 的有用提示。
若要详细了解特定的 Azure CLI 命令,请参阅 Azure CLI 参考列表。
选择脚本语言
Azure CLI 是一个开放源代码工具,可在许多脚本语言中运行。
- 它是用于确定 Azure CLI 命令的引用、转义字符和行延续规则的脚本语言。
- 在不同语言之间复制包含单引号或双引号、转义字符或行延续字符的 Azure CLI 命令语法可能会很困难。
- Azure CLI 的大多数Microsoft文档都是在 Bash 中编写和测试的。
- 如果 PowerShell 是所选脚本语言,请考虑使用具有本机 PowerShell 脚本语言功能的工具 Azure PowerShell。
有关 Azure CLI 的脚本语言选项的详细信息,请参阅 选择正确的命令行工具。
常见问题
下面是一些链接,可帮助你回答最常见的 Azure CLI 问题:
主题领域与文章链接 | 小窍门 |
---|---|
通过代理工作 | 有关如何通过代理服务器工作的信息。 |
网络账户经理 (WAM) | 有关 WAM 以及如何禁用它的信息。 |
配置设置 | 可用的 Azure CLI 配置设置列表、如何打开/关闭 Azure CLI 功能并设置默认值。 |
输出格式 | 有关如何将 Azure 资源 ID 存储在变量中以及保护 Azure CLI 命令返回的机密的说明。 |
在字符串中传递 JSON 值 | 引用 JSON 参数值的示例。 |
支持生命周期 | 有关 Azure CLI 版本和依赖项支持的操作系统、脚本语言和服务结束的信息。 |
REST API | 当某个 Azure 资源未能使用特定的 Azure CLI 命令时,可使用的替代命令是 az rest。 |
Azure CLI 参考组 | 从 A 到 Z 的 Azure CLI 参考组列表,深入到子组和所有 Azure CLI 命令。 |
Azure CLI 文章 | 使用 Azure CLI 参考命令的快速入门、操作指南和教程的 A to Z 列表。 列表按引用组和子组进行分组,便于搜索。 |
Azure CLI 示例 | 从 A 到 Z 的示例列表,包括 Azure-samples/azure-cli-samples GitHub 存储库中的示例。 |
故障排除 | 错误原因和修正提示。 |
新增功能 | 新 Azure CLI 功能的简短摘要。 |
将值传递给其他命令
如果某个值被多次使用,请将它分配给一个变量。 通过变量,你可以多次使用值或创建更多通用脚本。 此示例将 az vm list 命令找到的一个 ID 分配给一个变量。
# assign the list of running VMs to a variable
running_vm_ids=$(az vm list --resource-group MyResourceGroup --show-details \
--query "[?powerState=='VM running'].id" --output tsv)
# verify the value of the variable
echo $running_vm_ids
如果某个值只使用一次,建议考虑使用管道。 (管道将一个命令的输出作为输入传递给第二个命令。
az vm list --query "[?powerState=='VM running'].name" --output tsv | grep my_vm
对于多值列表,请考虑以下选项:
- 如需加强对结果的控制,请使用“for”循环:
#!/usr/bin/env bash
for vmList in $(az vm list --resource-group MyResourceGroup --show-details --query "[?powerState=='VM running'].id" -output tsv); do
echo stopping $vmList
az vm stop --ids $vmList
if [ $? -ne 0 ]; then
echo "Failed to stop $vmList"
exit 1
fi
echo $vmList stopped
done
- 或者,使用
xargs
,并考虑使用-P
标志来并行运行操作以提高性能:
az vm list --resource-group MyResourceGroup --show-details \
--query "[?powerState=='VM stopped'].id" \
--output tsv | xargs -I {} -P 10 az vm start --ids "{}"
- 最后,Azure CLI 具有内置支持,可并行处理具有多个
--ids
的命令,以实现 xargs 的相同效果。@-
用于从管道获取值:
az vm list --resource-group MyResourceGroup --show-details \
--query "[?powerState=='VM stopped'].id" \
--output tsv | az vm start --ids @-
有关将 Bash 构造与 Azure CLI 配合使用的详细信息,包括循环、case 语句、if..then..else 以及错误处理,请参阅了解如何将 Bash 与 Azure CLI 配合使用。
常见更新参数
Azure CLI 命令组通常使用 update 命令。 例如,Azure 虚拟机包括 az vm update 命令。 大多数更新命令提供三个常见参数:--add
和--set
--remove
。
--set
和 --add
参数采用以空格分隔的键值对列表:key1=value1 key2=value2
。 若要查看可更新的属性,请使用 show 命令,如 az vm show。
az vm show --resource-group VMResources --name virtual-machine-01
若要简化此命令,请考虑使用 JSON 字符串。 例如,若要将新的数据磁盘附加到虚拟机,请使用以下值:
az vm update --resource-group VMResources --name virtual-machine-01 \
--add storageProfile.dataDisks "{\"createOption\": \"Attach\", \"managedDisk\":
{\"id\":
\"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/yg/providers/Microsoft.Compute/disks/yg-disk\"},
\"lun\": 1}"
通用资源命令
想要使用的服务可能没有 Azure CLI 支持。 可以使用 az resource 或 az rest 命令处理这些资源。
并发执行
如果在同一台计算机上并发运行 Azure CLI 命令,如果多个 Azure CLI 命令写入同一Microsoft身份验证库(MSAL)令牌缓存,则会发生写入冲突。
为了避免潜在的故障,请通过将每个脚本的环境变量 AZURE_CONFIG_DIR
设置为单独的目录来隔离每个脚本的 Azure CLI 配置文件夹。 该脚本中的 Azure CLI 命令会将配置和令牌缓存保存到配置的位置,而不是默认 ~/.azure
文件夹。
export AZURE_CONFIG_DIR=/my/config/dir
异步操作
Azure 中的操作可能需要花费很长时间。 例如,在数据中心配置虚拟机不是即时的。 Azure CLI 会等待命令完成以接受其他命令。 因此,许多命令提供 --no-wait
参数,如下所示:
az group delete --name MyResourceGroup --no-wait
删除资源组时,属于该资源组的所有资源也会被删除。 删除这些资源可能需要较长时间。 使用 --no-wait
参数运行命令时,控制台会在不中断删除操作的情况下接受新命令。
许多命令都提供等待选项,可在满足某些条件之前暂停控制台。 下面的示例使用 az vm wait 命令支持并行创建独立资源:
az vm create --resource-group VMResources --name virtual-machine-01 --image centos --no-wait
az vm create --resource-group VMResources --name virtual-machine-02 --image centos --no-wait
subscription=$(az account show --query "id" -o tsv)
vm1_id="/subscriptions/$subscription/resourceGroups/VMResources/providers/Microsoft.Compute/virtualMachines/virtual-machine-01"
vm2_id="/subscriptions/$subscription/resourceGroups/VMResources/providers/Microsoft.Compute/virtualMachines/virtual-machine-02"
az vm wait --created --ids $vm1_id $vm2_id
创建这两个 ID 后,你可以再次使用控制台。
脚本示例
下面是使用 Azure 虚拟机时使用变量并循环访问列表的示例。 有关将 Bash 构造与 Azure CLI 配合使用的深度示例,包括循环、case 语句、if..then..else 以及错误处理,请参阅了解如何将 Bash 与 Azure CLI 配合使用。
使用这些脚本将 ID 保存到变量:
ECHO OFF
SETLOCAL
FOR /F "tokens=* USEBACKQ" %%F IN (
`az vm list --resource-group VMResources --show-details --query "[?powerState=='VM running'].id" --output tsv`
) DO (
SET "vm_ids=%%F %vm_ids%" :: construct the id list
)
az vm stop --ids %vm_ids% :: CLI stops all VMs in parallel
使用这些脚本循环访问列表:
ECHO OFF
SETLOCAL
FOR /F "tokens=* USEBACKQ" %%F IN (
`az vm list --resource-group VMResources --show-details --query "[?powerState=='VM running'].id" --output tsv`
) DO (
ECHO Stopping %%F
az vm stop --ids %%F
)