你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在本教程步骤中,了解如何使用变量:
- 执行 Azure CLI 命令并将输出存储在变量中。
- 读取本地 JSON 文件并将属性值存储在变量中。
变量的一些常见用例包括:
- 获取有关现有 Azure 资源的信息,例如资源 ID。
- 从 Azure CLI 命令(例如密码)获取输出。
- 获取有关环境信息的 JSON 对象,例如开发 ID、预发布 ID 和生产 ID。
然后,可以在 Azure CLI 中使用该变量大规模执行生成和销毁作业。
先决条件
- 有权在存储帐户级别访问具有
reader
或更高权限的资源组和存储帐户。
使用 JMESPath 查询获取命令输出
使用 --query
命令的参数 show
获取有关现有 Azure 资源的信息。 执行 JMESPath 查询 ,并返回 Azure 资源的一个或多个属性值。
小窍门
--query
语法区分大小写,依赖于环境。 如果收到空结果,请检查首字母大小写。 通过应用您在《了解 Bash、PowerShell 和 Cmd 中的 Azure CLI 语法差异》中学到的规则来避免引用错误
除非指定了参数--output
,否则这些示例依赖于为 json
设置的默认输出配置
获取 Azure 资源的 JSON 字典属性
使用在Bash、PowerShell 和 Cmd 中学习 Azure CLI 语法差异时创建的存储帐户,获取新的存储帐户的primaryEndpoints
。
az storage account show --resource-group <msdocs-tutorial-rg-00000000> \
--name <msdocssa000000000> \
--query primaryEndpoints
控制台 JSON 字典输出:
{
"blob": "https://msdocssa00000000.blob.core.windows.net/",
"dfs": "https://msdocssa00000000.dfs.core.windows.net/",
"file": "https://msdocssa00000000.file.core.windows.net/",
"internetEndpoints": null,
"microsoftEndpoints": null,
"queue": "https://msdocssa00000000.queue.core.windows.net/",
"table": "https://msdocssa00000000.table.core.windows.net/",
"web": "https://msdocssa00000000.z13.web.core.windows.net/"
}
获取单个 JSON 对象
指定以逗号分隔的存储帐户属性列表以返回数组(列表)中的单个属性。
az storage account show --resource-group <msdocs-tutorial-rg-00000000> \
--name <msdocssa000000000> \
--query "[id, primaryLocation, primaryEndpoints.blob, encryption.services.blob.lastEnabledTime]"
控制台 JSON 数组输出:
[
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/msdocs-tutorial-rg-00000000/providers/Microsoft.Storage/storageAccounts/ msdocssa000000000",
"eastus",
"https://msdocssa000000000.blob.core.windows.net/",
"yyyy-mm-ddT19:11:56.399484+00:00"
]
重命名属性
使用大括号 ({}
) 和逗号分隔的列表重命名属性。 新属性名称不能包含空格。 此示例返回以 table
格式的输出。
az storage account show --resource-group <msdocs-tutorial-rg-00000000> \
--name <msdocssa000000000> \
--query "{saName:name, saKind:kind, saMinTLSVersion:minimumTlsVersion}" \
--output table
控制台中的表格输出。 每列的第一个字母大写:--output table
SaName SaKind SaMinTLSversion
----------------- --------- -----------------
msdocssa000000000 StorageV2 TLS1_0
筛选查询结果
结合你学到的关于引用的内容与刚刚学到的 --query
的内容。 这些示例应用筛选器。
在 Bash 中,不能在等号=
之前或之后有一个空格。 您可以选择为变量值添加引号,因此 msdocs-tutorial-rg-00000000
和 "msdocs-tutorial-rg-00000000"
都是正确的。
rgName="<msdocs-tutorial-rg-00000000>"
# Get a list of all Azure storage accounts that allow blob public access.
# Notice the backticks and escape characters needed for boolean values.
az storage account list --resource-group $rgName \
--query "[?allowBlobPublicAccess == \`true\`].name"
# Get a list of Azure storage accounts that were created in the last 30 days. Return the results as a table.
saDate=$(date +%F -d "-30days")
az storage account list --resource-group $rgName \
--query "[?creationTime >='$saDate'].{saName:name, createdTimeStamp:creationTime}" \
--output table
# Get a list of Azure storage accounts created in this tutorial
az storage account list --resource-group $rgName \
--query "[?contains(name, 'msdocs')].{saName:name, saKind:kind, saPrimaryLocation:primaryLocation, createdTimeStamp:creationTime}" \
--output table
创建新的 Azure 资源,将输出存储在变量中
创建应保护的机密的 Azure 资源时,了解如何将命令输出存储在变量中非常有用。 例如,创建服务主体、重置凭据或获取 Azure 密钥保管库机密时,应保护命令输出。
创建一个新的 Azure Key Vault 和密钥,将命令输出存储到一个变量中。 Azure Key Vault 名称必须全局唯一,因此 $RANDOM
在此示例中使用标识符。 有关更多 Azure Key Vault 命名规则,请参阅 Azure Key Vault 的常见错误代码。
这些示例用于 echo
验证变量值,因为这是教学教程。 不要在生产级环境中将 echo
用于机密值和密码。
# Set your variables.
let "randomIdentifier=$RANDOM*$RANDOM"
rgName="<msdocs-tutorial-rg-00000000>"
kvName="msdocs-kv-$randomIdentifier"
___location="eastus"
# Set your default output to none
az config set core.output=none
# Create a new Azure Key Vault returning the Key Vault ID
myNewKeyVaultID=$(az keyvault create --name $kvName --resource-group $rgName --___location $___location --query id --output tsv)
echo "My new Azure Kev Vault ID is $myNewKeyVaultID"
# Wait about 1 minute for your Key Vault creation to complete.
# Create a new secret returning the secret ID
kvSecretName="<myKVSecretName>"
kvSecretValue="<myKVSecretValue>"
myNewSecretID=$(az keyvault secret set --vault-name $kvName --name $kvSecretName --value $kvSecretValue --query id --output tsv)
echo "My new secret ID is $myNewSecretID"
# Reset your default output to json
az config set core.output=json
获取 JSON 文件的内容并将其存储在变量中
下一部分是入职教程中的“挑战任务”。 但是,若要在开发、阶段和生产环境中管理 Azure 资源,通常需要读取配置文件。
是否准备好扩展 Azure CLI 技能? 创建包含以下 JSON 的 JSON 文件,或所选文件内容。 将文本文件保存到本地驱动器。 如果在 Azure Cloud Shell 中工作,请使用 upload/download files
菜单栏中的图标将文本文件存储在云存储驱动器中。
{
"environments": {
"dev": [
{
"id": "1",
"kv-secretName": "dev1SecretName",
"status": "inactive",
},
{
"id": "2",
"kv-secretName": "dev2SecretName",
"status": "active"
}
],
"stg": {
"id": "3",
"kv-secretName": "dev3SecretName"
},
"prod": {
"id": "4",
"kv-secretName": "dev4SecretName"
}
}
}
将 JSON 文件的内容存储在变量中,以便在 Azure CLI 命令中进一步使用。 在此示例中,将msdocs-tutorial.json
更改为您的文件名。 不要将 echo
命令保存在生产级脚本中,因为输出保存在日志文件中。
此 Bash 脚本已在 Azure Cloud Shell 中进行测试, 具体取决于必须在环境中安装的 Bash jq 。
# Show the contents of a file in the console
fileName="msdocs-tutorial.json"
cat $fileName | jq
# Get a JSON dictionary object
stgKV=$(jq -r '.environments.stg."kv-secretName"' $fileName)
echo $stgKV
# Filter a JSON array
devKV=$(jq -r '.environments.dev[] | select(.status=="active") | ."kv-secretName"' $fileName)
echo $devKV
是否刚刚收到“找不到 jq 命令”错误? 这是因为此脚本依赖于 Bash jq 命令。 在环境中安装 jq,或在 Azure Cloud Shell 中运行此脚本。
现在,你有一个存储在变量中的特定于环境的 Azure Key Vault 机密名称,可以使用它连接到 Azure 资源。 若要重复使用 Azure CLI 脚本,此方法适用于 Azure VM 和 SQL Server 连接字符串的 IP 地址。
获取更多详细信息
您想了解本教程步骤中涉及的某个主题的更多详细信息吗? 请使用下表中的链接了解详细信息。
使用者 | 了解详细信息 |
---|---|
变量 | 查看 “成功使用 Azure CLI”中的高级示例 - 将值传递到另一个命令 |
阅读 有关如何在 Azure CLI 命令中使用变量的良好概述。 | |
查询 | 在如何使用 JMESPath 查询查询 Azure CLI 命令输出中查找各种示例。 |
深入了解 Bash,了解如何 --query 将 Bash 与 Azure CLI 配合使用。 |
|
Azure 密钥保管库 | 关于 Azure Key Vault |
使用 Azure 基于角色的访问控制提供对 Key Vault 密钥、证书和机密的访问权限。 | |
Azure Key Vault 的常见错误代码 | |
PowerShell | 参考链接: Get-content、 Where-Object、 Select-Object |
下一步
了解如何使用变量存储 Azure CLI 命令输出和 JSON 属性值后,请继续下一步了解如何使用脚本删除 Azure 资源。