たくまるの日記

中小企業診断士試験合格のエンジニアが法人向けにITの話題を投稿します。

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

これでコマンドプロンプトだけで作業できそうですね。