[Azure] プライベートIPからリソースを検索するためのazurecliコマンド

Azureで仮想ネットワーク内に多数のリソースを作成している場合、プライベートIPをキーに対象リソースを検索したい場合があります。

ポータルでは仮想ネットワークの概要に表示されている「接続デバイス」の一覧で情報が参照できますが、リソースが増えてくると毎回ここで検索するのは手間になってくるので、同じ情報を取得するCLIを調査しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/2f55ff6d-aaa3-9b0b-e5bd-e5f3c01b8c8b.png)

検索バーで検索できてほしいが今はできない・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172826/2e5b34df-fd23-3199-0d3c-5c8a71171f3f.png)

仮想マシン、ロードバランサ、仮想マシンスケールセットでコマンドが違うのでそれぞれ見ていきます。

# 仮想マシン(VM)の場合

az network nic list コマンド1つで必要な情報が取得できます。

```shell
$ az network nic list | jq -r '.[] | [.name, .virtualMachine .id, .ipConfigurations[] .privateIpAddress ]'
```

実行結果例（NICの数だけ結果が表示されます）：

```shell
[
  "vm-app01-nic",
  "/subscriptions/_XX_/resourceGroups/_YY_/providers/Microsoft.Compute/virtualMachines/vm-app01",
  "10.3.1.105"
]
```

仮想マシンの情報は、2番目のIDの中に含まれている（"`_YY_`"の部分がリソースグループ名、"/virtualMachines/"の後がVM名）ので、それをキーに az vm show コマンドで検索して詳細を取得することもできます。

# ロードバランサ(LB)の場合

LBの場合もVMとほぼ同様に az network lb list コマンド1つで必要な情報が取得できます。

```shell
$ az network lb list | jq -r '.[] | [.id, .name, .frontendIpConfigurations[] .privateIpAddress ]'
```

実行結果例（LBの数だけ結果が表示されます）：

```shell
[
  "/subscriptions/_XX_/resourceGroups/_YY_/providers/Microsoft.Network/loadBalancers/kubernetes-internal",
  "kubernetes-internal",
  "10.3.23.4",
  "10.3.23.254",
  "10.3.23.253"
]
```

他も同様ですが、1つのリソースに複数のプライベートIPが割り当てられている場合は、4項目目以降に続けて表示されます。

# 仮想マシンスケールセット(VMSS)の場合

VMSSの場合は、まず az vmss list コマンドでVMSSの一覧を取得します。

```shell
$ az vmss list | jq -r '.[] | [ .name, .resourceGroup ]'
```

実行結果例（VMSSの数だけ結果が表示されます）：

```shell
[
  "aks-nodepool-42652286-vmss",
  "MC_AKS-CLUSTER-001_JAPANEAST"
]
```

取得されたVMSSごとに、az vmss nic list コマンドでIPアドレスの一覧が取得できます。

```shell
$ az vmss nic list --vmss-name aks-nodepool-42652286-vmss -g MC_AKS-CLUSTER-001_JAPANEAST | jq -r '.[] | [.name, .virtualMachine .id, .ipConfigurations[] .privateIpAddress ]'
```

実行結果例（VMSSが実行中のインスタンス数だけ結果が表示されます）：

```shell
[
  "aks-nodepool-42652286-vmss",
  "/subscriptions/_XX_/resourceGroups/MC_AKS-CLUSTER-001_JAPANEAST/providers/Microsoft.Compute/virtualMchineScaleSets/aks-nodepool-42652286-vmss/virtualMachines/57",
  "10.3.22.57",
  "10.3.22.58",
  "10.3.22.59",
  "10.3.22.60",
  "10.3.22.61",
  "10.3.22.62",
  "10.3.22.63",
  "10.3.22.64",
  "10.3.22.65",
  "10.3.22.66"
]
```

仮想マシンと同様に、2番目のIDの中にインスタンス情報が含まれています（"/resourceGroups/"の後がリソースグループ名、"/virtualMachines/"の後がインスタンスID）。この例はAKSクラスターのノードプールに対して実行した結果なので、多数のIPアドレスを使用していることが確認できます。

参考資料のCLI Referenceはこのあたりのコマンドはやや情報少なめなので、他に取得したい情報がある場合は、まずそれぞれのコマンドで `| jq -r` 以降を付けずに実行してみて下さい。CLI本来の実行結果が全て確認できます。

# 参考資料
- [Azure CLI Reference - az network nic list](https://docs.microsoft.com/en-us/cli/azure/network/nic?view=azure-cli-latest#az-network-nic-list)
- [Azure CLI Reference - az network lb list](https://docs.microsoft.com/en-us/cli/azure/network/lb?view=azure-cli-latest#az-network-lb-list)
- [Azure CLI Reference - az vmss list](https://docs.microsoft.com/en-us/cli/azure/vmss?view=azure-cli-latest#az-vmss-list)
- [Azure CLI Reference - az vmss nic list](https://docs.microsoft.com/en-us/cli/azure/vmss/nic?view=azure-cli-latest#az-vmss-nic-list)