成功使用 Azure CLI 的秘訣

Azure CLI 是命令行工具,可讓您從許多殼層環境設定和管理 Azure 資源。 選擇 慣用的殼層環境安裝 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 問題:

包含文章連結的主題區域 提示
在 Proxy 後方工作 如何透過 Proxy 伺服器工作的相關信息。
Web 帳戶管理員 (WAM) WAM 及其停用方式的相關信息。
組態設定 可用的 Azure CLI 組態設定清單、如何開啟/關閉 Azure CLI 功能,以及設定預設值。
輸出格式 有關如何將 Azure 資源識別符儲存在變數中的指示,以及保護 Azure CLI 命令傳回的秘密。
在字串中傳遞 JSON 值 引用 JSON 參數值的範例。
支援生命週期 Azure CLI 版本和相依性支援的作業系統、腳本語言和服務結束的相關信息。
REST API 特定 Azure CLI 命令不適用於 Azure 資源時,可使用 az rest 命令。
Azure CLI 參考群組 Azure CLI 參考群組的 A 至 Z 清單,向下切入至子群組和所有 Azure CLI 命令。
Azure CLI 文章 使用 Azure CLI 參考命令的快速入門、操作指南和教學課程的 Z 清單。 清單會依參考群組和子群組分組,以方便搜尋。
Azure CLI 範例 對 Z 的範例清單,包括 Azure-samples/azure-cli-samples GitHub 存放庫中的範例。
疑難排解 錯誤原因和補救秘訣。
新功能 新 Azure CLI 功能的簡短摘要。

將值傳遞至另一個命令

如果使用的值一次以上,請將它指派給變數。 變數可讓您多次使用值,或建立更一般腳本。 此範例會將 az vm list 命令所找到的標識碼指派給變數。

# 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

針對多重值清單,請考慮下列選項:

  1. 如果您需要對結果有更多的控件,請使用 「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
  1. 或者,使用 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 "{}"
  1. 最後,Azure CLI 內建支援以平行方式處理多個 --ids 命令,以達到 xargs 的相同效果。 @- 用來從管道取得值:
az vm list --resource-group MyResourceGroup --show-details \
    --query "[?powerState=='VM stopped'].id" \
    --output tsv | az vm start --ids @-

如需搭配 Azure CLI 使用 Bash 建構的詳細資訊,包括迴圈、case 語句 if.。然後。。否則,以及錯誤處理,請參閱 瞭解如何搭配 Azure CLI 使用 Bash。

一般更新參數

Azure CLI 命令群組通常具有更新命令。 例如,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 resourceaz 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

建立這兩個標識符之後,您就可以再次使用控制台。

腳本範例

以下是使用 Azure 虛擬機器 時,使用變數並迴圈查看清單的範例。 如需搭配 Azure CLI 使用 Bash 建構的深入範例,包括迴圈、case 語句 if.。然後。。否則,以及錯誤處理,請參閱 瞭解如何搭配 Azure CLI 使用 Bash。

使用這些文稿將識別元儲存至變數:

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
)

另請參閱