Azure CLIでVMのサイズ一覧を見やすく出力する。
Azure CLIを使うとコマンドラインからVirtual Machine(VM)の作成や起動・終了ができるので作業の自動化に非常に便利ですが、Azureで使えるリソースを検索する際はWebサイトを使用していました。
そのため、コマンドプロンプトとブラウザの間を行ったり来たりして非効率になっていました。例えばVMのサイズ一覧であれば、az vm list-sizes --location japaneastで取得できますがJSON形式になるので見やすくありません。
[
{
"maxDataDiskCount": 24,
"memoryInMb": 57344,
"name": "Standard_NV6",
"numberOfCores": 6,
"osDiskSizeInMb": 1047552,
"resourceDiskSizeInMb": 389120
},
{
"maxDataDiskCount": 48,
"memoryInMb": 114688,
"name": "Standard_NV12",
"numberOfCores": 12,
"osDiskSizeInMb": 1047552,
~以下略~
これをjqコマンドとcolumnコマンドを組み合わせると列がそろったテーブル形式で表示できます。
az vm list-sizes --location japaneast | jq -r '.[] | [.name, .numberOfCores, .memoryInMb] | @tsv' | sed '1iName\tCores\tMemory' | column -t
出力例
Name Cores Memory Standard_NV6 6 57344 Standard_NV12 12 114688 Standard_NV24 24 229376 Standard_NV6_Promo 6 57344 Standard_NV12_Promo 12 114688 Standard_NV24_Promo 24 229376 Standard_A0 1 768 Standard_A1 1 1792 ~以下略~
jq -rは出力から不要なダブルクォーテーションを削除する役割があります。[.name, .numberOfCores, .memoryInMb]でJSON形式のデータからname、numberOfCores、memoryInMb要素のみを抜き出して@tsvでタブ区切り形式で出力します。
sed '1iName\tCores\tMemory'で1行目にヘッダを追加していますが、1iは後続の文字列を1行目に追加するコマンドになります。最後にcolumn -tで出力を列単位で揃えて見やすくしています。
コア数2以下のサイズに限定したい場合は、awkコマンドを応用して、awk '($2 <= 2){print}'を繋げると2列目の数値が2以下の物だけが表示されます。
Standard_A0 1 768 Standard_A1 1 1792 Standard_A2 2 3584 Standard_A5 2 14336 Basic_A0 1 768 Basic_A1 1 1792 Basic_A2 2 3584 Standard_D1_v2 1 3584 Standard_D2_v2 2 7168 Standard_D11_v2 2 14336
これでコマンドプロンプトだけで作業できそうですね。