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