Azure CLI を正しく使用するためのヒント

Azure CLI は、多くのシェル環境から Azure リソースを構成および管理できるコマンド ライン ツールです。 好みのシェル環境を Azure CLI をインストール したらこの記事を使用して、一般的な落とし穴を回避し、Azure CLI を正常に使用する方法に関する有用なヒントを見つけ出してください。

特定の Azure CLI コマンドの詳細については、Azure CLI リファレンスの一覧を参照してください。

スクリプト言語を選択する

Azure CLI は オープンソース tool 多くのスクリプト言語で実行できます

  • これは、Azure CLI コマンドの引用符、エスケープ文字、および行継続規則を決定するスクリプト言語です。
  • Azure CLI コマンド構文をコピー 言語間で単一引用符または二重引用符、エスケープ文字、または行連結文字 を含めるのは困難な場合があります。
  • Azure CLI のほとんどの Microsoft ドキュメントは、Bash で記述およびテストされています。
  • PowerShell が任意のスクリプト言語である場合は、ネイティブ PowerShell スクリプト言語機能を備えているツール Azure PowerShell を使用することを検討してください。

Azure CLI のスクリプト言語オプションの詳細については、「 適切なコマンド ライン ツールを選択する」を参照してください。

よく寄せられる質問

よく寄せられる Azure CLI の質問に答える際に役立つリンクを次に示します。

記事リンク付きの件名領域 ヒント
プロキシの背後で作業する プロキシ サーバーで作業する方法に関する情報。
Web アカウント マネージャー (WAM) WAM とその無効化方法に関する情報。
構成設定 使用可能な Azure CLI 構成設定の一覧、Azure CLI 機能のオンとオフを切り替える方法、既定値を設定する方法。
出力形式 Azure リソース ID を変数に格納し、Azure CLI コマンドによって返されるシークレットを保護する方法について説明します。
文字列に JSON 値を渡す JSON パラメーター値の引用符の例。
サポート ライフサイクル サポートされているオペレーティング システム、スクリプト言語、および Azure CLI のバージョンと依存関係のサービス終了に関する情報。
REST API Azure リソース 特定の Azure CLI コマンドを使用できない場合に使用する代替の az rest コマンド。
Azure CLI 参照グループ サブグループとすべての Azure CLI コマンドへのドリルダウンを含む Azure CLI 参照グループの一覧。
Azure CLI の記事 Azure CLI リファレンス コマンドを使用するクイック スタート、ハウツー ガイド、チュートリアルの一覧です。 リストは参照グループとサブグループでグループ化され、簡単に検索できます。
Azure CLI のサンプル サンプルの一覧 (Azure-samples/azure-cli-samples GitHub リポジトリのサンプルを含む)。
トラブルシューティング エラーの原因と修復のヒント。
新着情報 新しい Azure CLI 機能の簡単な概要。

別のコマンドへ値を渡す

値が複数回使用される場合は、それを変数に代入します。 変数を使用すると、値を複数回使用したり、より一般的なスクリプトを作成したりすることができます。 この例では、az vm list コマンドによって検出された ID を変数に割り当てています。

# 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

値が 1 回しか使用されない場合は、パイプを検討してください。 (パイプ処理では、1 つのコマンドの出力が 2 番目のコマンドに入力として渡されます)。

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 には、xargs と同じ効果を得るために、複数の --ids を使って並列にコマンドを処理するためのサポートが組み込まれています。 @- は、パイプから値を取得するために使用されます。
az vm list --resource-group MyResourceGroup --show-details \
    --query "[?powerState=='VM stopped'].id" \
    --output tsv | az vm start --ids @-

ループ、case ステートメント、if..then..else、エラー処理を含む Bash コンストラクトを Azure CLI で使用する方法の詳細については、Bash を Azure CLI で使用する方法に関するページを参照してください。

一般的な更新パラメーター

Azure CLI コマンド グループでは多くの場合、update コマンドが備わっています。 たとえば、Azure Virtual Machines には az vm update コマンドが含まれています。 ほとんどの更新コマンドには、 --add--set--removeの 3 つの一般的なパラメーターが用意されています。

--set および --add パラメーターは、key1=value1 key2=value2 のようにスペースで区切られたキーと値のペアのリストを受け取ります。 更新できるプロパティを確認するには、az vm show などの 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}"

汎用 resource コマンド

使用するサービスでは、Azure CLI がサポートされていない可能性があります。 az リソースまたは az rest コマンドを使用して、これらのリソースを操作できます。

同時実行

同じコンピューターで Azure CLI コマンドを同時に実行すると、複数の Azure CLI コマンドが同じ Microsoft Authentication Library (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 パラメータを指定してコマンドを実行すると、コンソールでは、削除が中断されることなく新しいコマンドが受け入れられます。

多くのコマンドは 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

両方の ID が作成されたら、コンソールを再度使用できます。

スクリプトの例

Azure Virtual Machines を操作するときに、変数を使用し、リストをループ処理する例を次に示します。 ループ、case ステートメント、if..then..else、エラー処理を含む Bash コンストラクトを Azure CLI で使用する方法の詳細な例については、Bash を Azure CLI で使用する方法に関するページを参照してください。

ID を変数に保存するには、次のスクリプトを使用します。

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
)

関連項目