填入變數以用於腳本

在本教學課程步驟中,瞭解如何使用變數:

  • 執行 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-contentWhere-ObjectSelect-Object

後續步驟

既然您已瞭解如何使用變數來儲存 Azure CLI 命令輸出和 JSON 屬性值,請繼續進行下一個步驟,瞭解如何使用腳本來刪除 Azure 資源。