Azure CLI コマンドの出力形式

Azure CLI では既定の出力形式として JSON が使用されますが、他の形式も用意されています。 CLI の出力を書式設定するには、--output (--out または -o) パラメーターを使用します。 引数値と出力の種類は、次のとおりです。

--output 説明
json JSON 文字列。 この設定が既定値です
jsonc 色付けされた JSON
table 列見出しとしてキーが使用されている ASCII テーブル
tsv タブ区切りの値 (キーなし)
yaml YAML。JSON に代わる、人が判読できる形式
yamlc 色付けされた YAML
none エラーと警告以外は出力されません

警告

API キーや資格情報などのシークレットが公開されないように、 none の出力形式を使用するか、コマンド出力を変数に格納します。 注: 特定の CI/CD 環境では、実行されたコマンドの出力がログに保存される場合があります。 これらのログ ファイルに何が書き込まれ、誰がログにアクセスできるかを確認することをお勧めします。 詳しくは、None 出力形式に関するページをご覧ください。

JSON 出力形式 (デフォルト)

次の例では、既定の JSON 形式で、サブスクリプション内の仮想マシンの一覧が表示されます。

az vm list --output json

次の出力では、簡潔にするため、また置き換えた情報を識別するために、一部のフィールドが省略されています。

[
  {
    "availabilitySet": null,
    "diagnosticsProfile": null,
    "hardwareProfile": {
      "vmSize": "Standard_DS1"
    },
    "id": "/subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/DemoVM010",
    "instanceView": null,
    "licenseType": null,
    "location": "westus",
    "name": "DemoVM010",
    "networkProfile": {
      "networkInterfaces": [
        {
          "id": "/subscriptions/.../resourceGroups/demorg1/providers/Microsoft.Network/networkInterfaces/DemoVM010VMNic",
          "primary": null,
          "resourceGroup": "demorg1"
        }
      ]
    },
          ...
          ...
          ...
]

YAML 出力形式

yaml 形式では、出力が YAML として、つまりプレーン テキスト データのシリアル化形式として出力されます。 YAML は JSON より読みやすくなる傾向があり、その形式に簡単にマップされます。 一部のアプリケーションおよび CLI コマンドは、構成の入力として、JSON ではなく YAML を受け取ります。

az vm list --output yaml

次の出力では、簡潔にするため、また置き換えた情報を識別するために、一部のフィールドが省略されています。

- availabilitySet: null
  diagnosticsProfile: null
  hardwareProfile:
    vmSize: Standard_DS1_v2
  id: /subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/DemoVM010
  identity: null
  instanceView: null
  licenseType: null
  location: westus
  name: ExampleVM1
  networkProfile:
    networkInterfaces:
    - id: /subscriptions/.../resourceGroups/DemoRG1/providers/Microsoft.Network/networkInterfaces/DemoVM010Nic
      primary: null
      resourceGroup: DemoRG1
  ...
...

テーブル出力形式

table 形式では出力が ASCII テーブルとして生成されるため、読み取りやスキャンが容易になります。 入れ子になったオブジェクトはテーブル出力には含まれませんが、クエリの一部としてフィルター処理することもできます。 この形式では一部のフィールドがテーブルに含まれないため、人の目ですばやく検索できるデータ概要が必要な場合に最適です。

az vm list --output table
Name         ResourceGroup    Location
-----------  ---------------  ----------
DemoVM010    DEMORG1          westus
demovm212    DEMORG1          westus
demovm213    DEMORG1          westus
KBDemo001VM  RGDEMO001        westus
KBDemo020    RGDEMO001        westus

--query パラメーターを使用すると、一覧の出力に表示するプロパティと列をカスタマイズすることができます。 次の例は、list コマンドで VM 名とリソース グループ名だけを選択する方法を示しています。

az vm list --query "[].{resource:resourceGroup, name:name}" --output table
Resource    Name
----------  -----------
DEMORG1     DemoVM010
DEMORG1     demovm212
DEMORG1     demovm213
RGDEMO001   KBDemo001VM
RGDEMO001   KBDemo020

注意

一部のキーは、既定でテーブル ビューには出力されません。 idtype、および etag が、これに相当します。 出力でこれらを表示する必要がある場合は、JMESPath キー更新機能を使用してキー名を変更し、フィルター処理を回避します。

az vm list --query "[].{objectID:id}" --output table

クエリを使用してデータをフィルター処理する方法の詳細については、「Azure CLI で JMESPath クエリを使用する」を参照してください。

TSV 出力形式

tsv 出力形式では、追加の書式設定、キー、またはその他の記号はなしで、タブと改行で区切られた値が返されます。 この形式を使用すると、なんらかの形式でテキストを処理する必要がある他のコマンドやツールで出力を簡単に利用できるようになります。 table 形式と同じく、tsv では、入れ子になったオブジェクトは出力されません。

前の例で tsv オプションを使用すると、タブ区切りの結果が出力されます。

az vm list --output tsv
None    None        /subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/DemoVM010    None    None    westus    DemoVM010            None    Succeeded    DEMORG1    None            Microsoft.Compute/virtualMachines    cbd56d9b-9340-44bc-a722-25f15b578444
None    None        /subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/demovm212    None    None    westus    demovm212            None    Succeeded    DEMORG1    None            Microsoft.Compute/virtualMachines    4bdac85d-c2f7-410f-9907-ca7921d930b4
None    None        /subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/demovm213    None    None    westus    demovm213            None    Succeeded    DEMORG1    None            Microsoft.Compute/virtualMachines    2131c664-221a-4b7f-9653-f6d542fbfa34
None    None        /subscriptions/.../resourceGroups/RGDEMO001/providers/Microsoft.Compute/virtualMachines/KBDemo001VM    None    None    westus    KBDemo001VM            None    Succeeded    RGDEMO001    None            Microsoft.Compute/virtualMachines    14e74761-c17e-4530-a7be-9e4ff06ea74b
None    None        /subscriptions/.../resourceGroups/RGDEMO001/providers/Microsoft.Compute/virtualMachines/KBDemo020   None    None    westus    KBDemo020            None    Succeeded    RGDEMO001    None            Microsoft.Compute/virtualMachines    36baa9-9b80-48a8-b4a9-854c7a858ece

TSV 出力形式の制限の 1 つは、出力順序が保証されないことです。 CLI では、順序を最大限維持するために、応答 JSON 内のキーをアルファベット順に並べ替え、次にそれらの値を TSV 出力用の順序で表示します。 これは、順序が常に同じであることを保証するものではありません。Azure サービスの応答形式が変更される可能性があるためです。

一貫した順序を強制するには、--query パラメーターと複数選択リストの形式を使用する必要があります。 CLI コマンドが 1 つの JSON 辞書を返す場合は、一般的な形式 ([key1, key2, ..., keyN]) を使用してキーの順序を強制します。 配列を返す CLI コマンドの場合、一般的な形式 ([].[key1, key2, ..., keyN]) を使用して列の値を並べ替えます。

たとえば、上に表示されている情報を ID、場所、リソース グループ、VM 名で並べ替えるには、次のようにします。

az vm list --output tsv --query '[].[id, location, resourceGroup, name]'
/subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/DemoVM010    westus    DEMORG1    DemoVM010
/subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/demovm212    westus    DEMORG1    demovm212
/subscriptions/.../resourceGroups/DEMORG1/providers/Microsoft.Compute/virtualMachines/demovm213    westus    DEMORG1    demovm213
/subscriptions/.../resourceGroups/RGDEMO001/providers/Microsoft.Compute/virtualMachines/KBDemo001VM     westus  RGDEMO001       KBDemo001VM
/subscriptions/.../resourceGroups/RGDEMO001/providers/Microsoft.Compute/virtualMachines/KBDemo020       westus  RGDEMO001       KBDemo020

次の例は、tsv の出力を Bash の他のコマンドにパイプ処理する方法を示しています。 このクエリを使用して出力をフィルターにかけて順序を強制し、grep によって "RGD" というテキストが含まれている項目を選択し、cut コマンドによって 4 番目のフィールドの値を選択して VM の名前を出力に表示します。

az vm list --output tsv --query '[].[id, location, resourceGroup, name]' | grep RGD | cut -f4
KBDemo001VM
KBDemo020

tsv 出力形式は、変数に値を割り当てるときによく使用されます。 この例では、アクティブなサブスクリプション ID を取得し、スクリプトで使用するために変数に格納します。

# Bash Script
subscriptionID=$(az account show --query id --output tsv)
echo "Using subscription ID $subscriptionID"

--query パラメーターの詳細については、「Azure CLI コマンドの出力に対してクエリを実行する方法」を参照してください。

None 出力形式

一部の Azure CLI コマンドでは、保護する必要がある情報が出力されます。 以下に 4 つの例を示します。

  • パスワード
  • 接続文字列
  • secrets
  • キー

Azure CLI コマンドを使用するときにシークレットとキーを保護するには、次のいずれかのオプションを選択します。

オプション 特長 使用例
--output none 出力形式 機密情報がコンソールに表示されないようにします。 コマンドが失敗しても、エラー メッセージが表示されます。 1.コマンド出力 を後で 取得できる場合に使用します。
2.出力が不要な場合に使用します。
3.マネージド ID またはサービス プリンシパルを使用して Azure リソースを管理する場合の一般的な選択肢です。
--query パラメーター 出力を変数に格納します。 1.コマンド出力 を後で 取得できない場合に使用します。
2.スクリプトでコマンド出力値を使用する必要がある場合に使用します。

none を使用して後でセキュリティ情報を取得する

一部の Azure シークレットは、後で取得できます。 良い例は、Azure Key Vault に格納されているシークレットです。 この例では、az keyvault secret set--output none オプションと使用して、Azure Key Vault シークレットを作成します。 シークレットは、後で az keyvault secret show コマンドを使用して取得できます。

az keyvault secret set --name MySecretName \
                       --vault-name MyKeyVaultName \
                       --value MySecretValue\
                       --output none

--query を使用して変数にセキュリティ情報を返す

--query を使用して出力を変数に格納することは、技術的には出力形式ではありません。 これはシークレットを保護するためのソリューションであり、 --output noneを使用する代わりに使用できます。 たとえば、サービス プリンシパルの資格情報をリセットすると、パスワードを再度取得することはできません。

既定の json 形式で出力を返すサービス プリンシパル資格情報をリセットします。

# reset service principal credentials using default output format (json).
az ad sp credential reset --id myServicePrincipalID --output json

コンソールの新しいパスワードを示すコンソール出力。

{
  "appId": "myServicePrincipalID",
  "password": "myServicePrincipalNewPassword",
  "tenant": "myTenantID"
}

より適切な解決策は、変数に機密情報を返すことです。

# Bash Script
# reset service principal credentials returning results to a variable
myNewPassword=$(az ad sp credential reset --id myServicePrincipalID --query password --output tsv)

# Display the new password (remove this line in production for security)
echo "New password: $myNewPassword"

出力を変数に格納する例については、「 Azure CLI を正常に使用する - 別のコマンドに値を渡す」を参照してください。 --query パラメーター構文の詳細については、「Azure CLI コマンドの出力に対してクエリを実行する方法」を参照してください。

既定の出力形式を設定する

Azure CLI コマンドは、次の 2 つの方法で制御できる出力を提供します。

出力制御 特長 操作方法
グローバル設定 参照コマンドごとに --output パラメーターを継続的に指定する必要がないように、最も多く使用する既定の出力値を選択します。 az config set を使用して出力形式を指定します。
Command パラメーター コマンド レベルで出力を指定し、スクリプトの柔軟性を最大限に高めます。 各参照コマンドのコンソール出力および変数入力を制御します。 参照コマンドの --output パラメーターを使用して、既定の設定をオーバーライドします。

Azure CLI の既定の出力は json です。 コンソール出力が必要ない場合は、既定の出力を none に設定します。

az config set core.output=none

--output パラメーターを使用して、任意の Azure CLI 参照コマンドの既定の出力を上書きできます。 コマンド出力を変更してテストするコマンドのスクリプトを次に示します。

# set your default output to table
az config set core.output=table

# show your active subscription in table format
# notice how only a subset of properties are returned in the table
az account show

# override your table default and show your active subscription in jsonc format
az account show --output jsonc

# reset your default output to json
az config set core.output=json

関連項目