Check! Azure CLI 2.0 のフィルタクエリ (--query) サンプル集

こんにちは、 @dz_ こと大平かづみです。

Prologue - はじめに
====
Azure をバリバリ使う機会が増え、効率化を図るために CLI を導入しました！Azure CLI 2.0 です。

Azure CLI 2.0 のインストールについては、 [Install the Azure CLI 2.0 | Microsoft Docs](https://docs.microsoft.com/ja-jp/cli/azure/get-started-with-azure-cli "Install the Azure CLI 2.0 | Microsoft Docs") をご参照くださいませ。

Azure CLI 2.0 の `--query` について
====

`--query` は、[JMESPath](http://jmespath.org/ "JMESPath — JMESPath") の記法を用いて出力結果を操作できるオプションです。感触としては `jq` に似てると思いました。慣れるにはこちらのサンプルを一通り試してみるとよいです。

- **[Query command results with Azure CLI 2.0 | Microsoft Docs](https://docs.microsoft.com/ja-jp/cli/azure/query-azure-cli "Query command results with Azure CLI 2.0 | Microsoft Docs")**
    - 基本的なサンプルたくさんのってるのでお勧めです！

サンプル集
====

リソースグループ内の仮想マシンのid一覧を取得して、複数指定を楽にする
----

`az` コマンドは `--ids` として複数のIDを指定することができるものがあります。

ID は名前と違って長くて覚えきれないので、 `--query` を使って一覧を取得しておくと便利です。`-o tsv` と組み合わせるいことで、コピペもしやすい！

以下はリソースグループ内の仮想マシンの ID 一覧を取得するコマンド例です。

```bash
$ az vm list -g yourResourceGroup --query "[].id" -o tsv

/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/yourResourceGroup/providers/Microsoft.Compute/virtualMachines/vm001
/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/yourResourceGroup/providers/Microsoft.Compute/virtualMachines/vm002
/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/yourResourceGroup/providers/Microsoft.Compute/virtualMachines/vm003
```

```js:--query
[].id
```

`--ids` に指定するときは、以下のようにスペース区切りで指定します。

```bash
$ az vm start --ids /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/yourResourceGroup/providers/Microsoft.Compute/virtualMachines/vm001 /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/yourResourceGroup/providers/Microsoft.Compute/virtualMachines/vm002 /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/yourResourceGroup/providers/Microsoft.Compute/virtualMachines/vm003
```


仮想マシンの稼働状態を表示する
----
`az vm get-instance-view` で、仮想マシンの稼働状態を取得することができます。`--query` と組み合わせるとすっきり！ `--ids` での指定も可能です。

```bash
$ az vm get-instance-view --query "[].{Name:name,PowerState:instanceView.statuses[1].displayStatus}" -o table -g yourResourceGroup -n yourVmName 

Name          PowerState
------------  --------------
yourVmName    VM deallocated
```

```js:--query
[].{Name:name,PowerState:instanceView.statuses[1].displayStatus}
```

リソースグループ内の仮想マシンのIPアドレスを表示する
----

`az vm list-ip-addresses` で、IPアドレスの一覧を取得することができます。これも、`--query` と `-o table` と組み合わせるとすっきり～

```bash
az vm list-ip-addresses --query "[].virtualMachine[].{Name:name, PublicIp:network.publicIpAddresses[0].ipAddress, PrivateIp:network.privateIpAddresses[0]}" -o table -g yourResourceGroup

Name    PrivateIp    PublicIp
------  -----------  --------------
vm001   192.168.0.4  52.170.213.177
vm002   192.168.0.5
```

```js:--query
[].virtualMachine[].{Name:name, PublicIp:network.publicIpAddresses[0].ipAddress, PrivateIp:network.privateIpAddresses[0]}
```

おまけ
====

`--query` に関わらないけど便利な使い方をメモしておきます。

選べる出力形式が便利
----
前述のサンプル集でも利用していますが、どの `az` コマンドでも、 `-o` または `--output` オプションで出力形式を指定できます。

たとえば、単純に `-o table` を指定すると、そのコマンドの主要な情報を見やすい一覧にして表示してくれます。

```bash
$ az vm list-ip-addresses -g yourResourceGroup -o table

VirtualMachine     PrivateIPAddresses
-----------------  --------------------
vm001              192.168.0.4
vm002              192.168.0.5
vm003              192.168.0.6
```

`--query` と組み合わせて表組をカスタマイズすることもできます。

また、`-o tsv` でタブ区切りの形式で出力することもできます。

よく使うリソースグループをデフォルトとして登録しておく
----

何度も同じパラメータを使う場合は、 `az configure` が便利です。

例えば、リソースグループのデフォルト値を指定しておくには、以下のように指定します。

```bash
$ az configure --defaults "group=yourResourceGroup"
```

リンクまとめ
====

- [Query command results with Azure CLI 2.0 | Microsoft Docs](https://docs.microsoft.com/ja-jp/cli/azure/query-azure-cli "Query command results with Azure CLI 2.0 | Microsoft Docs") (前述の再掲)
- [Azure CLI を使用した Linux VM イメージの選択 | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/virtual-machines/virtual-machines-linux-cli-ps-findimage "Azure CLI を使用した Linux VM イメージの選択 | Microsoft Docs")
    - 例えば、CentOS の指定バージョンを選択したいときなど

Prologue - おわりに
====
余談ですが、なぜサンプル集つくったかというと、コピペしたいからです！(｀・ω・´)ゝｷﾘｯ

思い付き次第、更新していきます～


[エクストリームデザイン]: http://xd-lab.net/