2
3

Azure CLI コマンドの出力をフィルタリングする

Posted at

はじめに

Azure CLI コマンドの出力は JSON 形式で返されるため、そのままでは読みづらいことがあります。本記事では、Azure CLI の出力をフィルタリングして必要な情報だけを的確に取得する方法を紹介します。

--query オプションを使用する方法

Azure CLI の --query オプションを使用すると、JMESPath クエリ言語を用いて出力結果をフィルタリングできます。

例えば、特定のリソースグループ内の仮想マシンの一覧を表示する際に、名前と OS のみを取得したい場合は以下のようにします。

az vm list -g myResourceGroup --query "[].{Name:name, OS:storageProfile.osDisk.osType}" -o table

このコマンドの詳細は以下の通りです。

  • az vm list -g myResourceGroup: 指定したリソースグループ内の仮想マシンの一覧を取得するコマンド
  • -query "[].{Name:name, OS:storageProfile.osDisk.osType}": 出力結果をフィルタリングするための JMESPath クエリ
    • []: 配列内の各要素に対してクエリを適用
    • {Name:name, OS:storageProfile.osDisk.osType}: 取得したい属性 (名前と OS の種類) を指定
  • o table: 出力形式をテーブル形式に指定

出力例:

Name       OS
---------  --------
linux-vm1  Linux
linux-vm2  Linux
windows-vm Windows

jq コマンドを使用する方法

jq は JSON 形式のデータを処理するためのコマンドラインツールです。Azure CLI の出力は JSON 形式なので、パイプで jq に渡すことでフィルタリングできます。

例えば、リソースグループ内の仮想マシン名だけを取得したい場合は以下のようにします。

az vm list -g myResourceGroup | jq '.[].name'

このコマンドの詳細は以下の通りです。

  • az vm list -g myResourceGroup: 指定したリソースグループ内の仮想マシンの一覧を取得するコマンド
  • | jq '.[].name': Azure CLI の出力を jq にパイプで渡し、JSON データをフィルタリング
    • .: JSON データのルート要素を表す
    • []: 配列内の各要素に対して処理を適用
    • name: 取得したい属性 (仮想マシン名) を指定

出力例:

"linux-vm1"
"linux-vm2"
"windows-vm"

jq の -r オプション

デフォルトでは、jq は JSON 形式で出力を生成するため、文字列値はダブルクォーテーション (") で囲まれます。しかし、-r (または --raw-output) オプションを使用すると、jq は出力からダブルクォーテーションを取り除き、生の文字列値だけを返します。

例えば、先ほどの例に -r オプションを追加すると:

az vm list -g myResourceGroup | jq -r '.[].name'

出力は次のようになります:

linux-vm1
linux-vm2
windows-vm

この出力では、仮想マシン名がダブルクォーテーションなしで表示されています。-r オプションは、jq の出力を他のコマンドやスクリプトに渡す場合に特に便利です。

その他の例

  • 特定のリソースグループ内のストレージアカウント名とアカウントの種類を取得する
az storage account list -g myResourceGroup --query "[].{Name:name, Type:sku.name}"

  • az storage account list -g myResourceGroup: 指定したリソースグループ内のストレージアカウントの一覧を取得するコマンド
  • -query "[].{Name:name, Type:sku.name}": 出力結果をフィルタリングするための JMESPath クエリ。名前 (name) とアカウントの種類 (sku.name) を取得

出力例:

[
  {
    "Name": "mystorageaccount1",
    "Type": "Standard_LRS"
  },
  {
    "Name": "mystorageaccount2",
    "Type": "Standard_GRS"
  }
]

  • 特定のリソースグループ内のパブリック IP アドレスの IP アドレスのみ取得する
az network public-ip list -g myResourceGroup | jq -r '.[].ipAddress'

  • az network public-ip list -g myResourceGroup: 指定したリソースグループ内のパブリック IP アドレスの一覧を取得するコマンド
  • | jq -r '.[].ipAddress': Azure CLI の出力を jq にパイプで渡し、JSON データをフィルタリング
    • r: jq の出力を生の文字列 (raw output) として表示

出力例:

20.43.122.47
52.143.90.218

まとめ

Azure CLI の --query オプションと jq コマンドを適切に使い分けることで、出力結果を柔軟にフィルタリングできます。また、コマンドにリソースグループを指定することで、特定のリソースグループ内のリソースに対して操作を行うことができます。jq-r オプションを使用すると、JSON 形式ではなく生の文字列値として出力を取得できます。これにより、必要な情報だけを的確に取得することが可能になります。是非、Azure CLI でのリソース管理にお役立てください。

参考記事

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3