CLI 出力からシェル変数を設定する

NIC ID が用意できたので、az network nic show を実行して、情報を取得してみましょう。 Azure リソース ID 内にリソース グループ名が含まれているので、ここではリソース グループは不要です。

az network nic show --ids $nicId

このコマンドにより、VM のネットワーク インターフェイスの情報すべてが表示されます。 このデータには、DNS 設定、IP 情報、セキュリティ設定、および MAC アドレスが含まれます。 次のクエリは、パブリック IP アドレスとサブネット オブジェクト ID を取得する方法を示しています。

az network nic show --ids $nicId \
  --query '{IP:ipConfigurations[].publicIPAddress.id, Subnet:ipConfigurations[].subnet.id}' \
  -o json
{
  "IP": [
    "/subscriptions/.../resourceGroups/TutorialResources/providers/Microsoft.Network/publicIPAddresses/TutorialVM1PublicIP"
  ],
  "Subnet": [
    "/subscriptions/.../resourceGroups/TutorialResources/providers/Microsoft.Network/virtualNetworks/TutorialVM1VNET/subnets/TutorialVM1Subnet"
  ]
}

このコマンドにより、抽出された値のカスタム キー ("IP" および "サブネット") を含む JSON オブジェクトが表示されます。 この出力スタイルは、コマンドライン ツールには不便な場合がありますが、可読性の向上に役立ち、カスタム スクリプトで使用できます。

コマンドライン ツールを使用するには、コマンドを変更することで、カスタム JSON キーを削除し、tsv として出力します。 read コマンドは、結果を複数の変数に読み込むことで、このスタイルの出力を処理します。 2 つの値は別々の行に表示されるため、read コマンドの区切り記号は、既定値の改行以外の空白文字ではなく、空の文字列に設定する必要があります。

read -d '' ipId subnetId <<< $(az network nic show \
  --ids $nicId \
  --query '[ipConfigurations[].publicIPAddress.id, ipConfigurations[].subnet.id]' \
  -o tsv)

Bash read または PowerShell -split コマンドを使用しない場合は、各変数を個別に設定できます。

$ipId = az network nic show --ids $nicId --query '[ipConfigurations[].publicIPAddress.id]' -o tsv
$subnetId = az network nic show --ids $nicId --query '[ipConfigurations[].subnet.id]' -o tsv

パブリック IP オブジェクト ID を使用して、パブリック IP アドレスをルックアップし、シェル変数に格納します。 サブネット ID は、Azure CLI で複数の値を照会して格納する方法を示すために使用されました。 そのため、このチュートリアルの残りの部分では、この ID は必要ありません。

vmIpAddress=$(az network public-ip show --ids $ipId \
  --query ipAddress \
  -o tsv)

これで VM の IP アドレスがシェル変数に格納されました。 これが、最初に VM に接続したときに使用した値と同じであることを確認してください。

echo $vmIpAddress