在本教學課程步驟中,瞭解如何使用變數:
- 執行 Azure CLI 命令,並將輸出儲存在變數中。
- 讀取本機 JSON 檔案,並將屬性值儲存在變數中。
變數的一些常見使用案例如下:
- 取得現有 Azure 資源的相關信息,例如資源識別符。
- 從 Azure CLI 命令取得輸出,例如密碼。
- 取得環境資訊的 JSON 物件,例如開發、階段和生產標識碼。
您可以使用 Azure CLI 中的 變數,大規模執行建置和終結作業。
先決條件
- 您有權存取在儲存體帳戶層級具有
reader或更高許可權的資源群組和儲存體帳戶。
使用 JMESPath 查詢取得命令輸出
使用 --query 命令的 show 參數取得現有 Azure 資源的相關信息。
會執行 JMESPath 查詢,並傳回一或多個 Azure 資源的屬性值。
小提示
--query 語法是區分大小寫的,且是環境專屬的。 如果您收到空的結果,請檢查字母的大寫。 在 Bash、PowerShell 和 Cmd 中套用您在 Learn 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 物件
若要傳回數位列 (list) 中的個別屬性,請指定以逗號分隔的記憶體帳戶屬性清單。
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 金鑰保存庫 名稱必須是全域唯一的,因此$RANDOM此範例會使用標識碼。 如需更多 Azure 金鑰保存庫 命名規則,請參閱 Azure 金鑰保存庫 的常見錯誤碼。
這些範例會使用 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 Key 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 金鑰保存庫 秘密名稱,而且您可以使用它來連線到 Azure 資源。 當您想要重複使用 Azure CLI 腳本時,這個相同的方法適用於 Azure VM 和 SQL Server 的 IP 位址 連接字串。
取得更多詳細數據
您要針對本教學課程步驟中涵蓋的其中一個主題提供更多詳細數據嗎? 使用此表格中的連結來深入瞭解。
| 主旨 | 瞭解更多資訊 |
|---|---|
| 變數 | 請參閱成功使用 Azure CLI 中的 進階範例 - 將值傳遞至另一個命令 |
| 閱讀如何在 Azure CLI 命令中使用變數的良好概 觀。 | |
| 查詢 | 在如何查詢 Azure CLI 命令輸出使用 JMESPath 查詢中,尋找多種範例。 |
深入探索 Bash,在--query學習如何搭配 Azure CLI 使用 Bash。 |
|
| Azure 金鑰保存庫 | 關於 Azure Key Vault |
| 使用 Azure 角色型存取控制,提供 金鑰保存庫 金鑰、憑證和秘密的存取權。 | |
| Azure 金鑰保存庫 的常見錯誤碼 | |
| PowerShell | 參考連結: Get-content、 Where-Object、 Select-Object |
後續步驟
既然您已瞭解如何使用變數來儲存 Azure CLI 命令輸出和 JSON 屬性值,請繼續進行下一個步驟,瞭解如何使用腳本來刪除 Azure 資源。