演習 - VM に関するシステム情報とランタイム情報を問い合わせる

完了

仮想マシンを作成したので、その情報を他のコマンドを使って取得できます。

最初に vm list を実行します。

az vm list

このコマンドは、このサブスクリプションで定義されているすべての仮想マシンを返します。 --resource-group パラメーターを使用して特定のリソース グループにフィルター処理することができます。

出力の種類

これまでに行ったすべてのコマンドに対する既定の応答の種類は、JSON でした。 これはスクリプトには優れていますが、ほとんどの人が読みにくいと感じます。 --output フラグを使用して、任意の応答の出力スタイルを変更することができます。 たとえば、Azure Cloud Shell で次のコマンドを実行し、異なる出力スタイルを確認します。

az vm list --output table

table と共に、json (既定値)、jsonc (色分けされた JSON)、または tsv (タブ区切り値) を指定できます。 上記のコマンドを使っていくつかのバリエーションを試して、違いを確認してください。

IP アドレスを取得する

もう 1 つの便利なコマンドが vm list-ip-addresses です。これを使うと、VM のパブリックおよびプライベート IP アドレスを一覧表示できます。 変更された場合、または作成時にキャプチャしなかった場合は、いつでも取得することができます。

az vm list-ip-addresses -n SampleVM -o table

次のような出力が返されます。

VirtualMachine    PublicIPAddresses    PrivateIPAddresses
----------------  -------------------  --------------------
SampleVM          168.61.54.62         10.0.0.4

ヒント

--output フラグの略式の構文として -o を使っていることに注目してください。 Azure CLI コマンドのほとんどのパラメーターは、単一のダッシュと文字に短縮できます。 たとえば、--name-n に、--resource-group-g に短縮できます。 これはキーボード文字の入力には便利ですが、スクリプトではわかりやすくするために完全なオプション名を使用することをお勧めします。 各コマンドの詳細については、ドキュメントで確認してください。

VM 詳細を取得する

vm show コマンドを実行し、名前または ID で特定の仮想マシンに関するより詳細な情報を取得できます。

az vm show --resource-group "<rgn>[sandbox resource group name]</rgn>" --name SampleVM

これにより、VM に関するあらゆる情報 (接続されている記憶域デバイス、ネットワーク インターフェイス、および VM が接続されているリソースのすべてのオブジェクト ID など) を含むかなり大きな JSON ブロックが返されます。 テーブル形式に変更することはできますが、それにより興味深いデータのほとんどが省略されます。 代わりに、JMESPath と呼ばれる JSON 用の組み込みクエリ言語を使用することができます。

JMESPath を使用してクエリにフィルターを追加する

JMESPath は、JSON オブジェクトを中心に構築された業界標準クエリ言語です。 最もシンプルなクエリは、JSON オブジェクト内のキーを選択する識別子を指定することです。

たとえば、次のようなオブジェクトについて考えてみましょう。

{
  "people": [
    {
      "name": "Fred",
      "age": 28
    },
    {
      "name": "Barney",
      "age": 25
    },
    {
      "name": "Wilma",
      "age": 27
    }
  ]
}

クエリ peopleを使用して、people 配列の値の配列を返すことができます。 people の 1 人だけが必要な場合は、インデクサーを使用できます。 たとえば、people[1] にすると、次が返されます。

{
    "name": "Barney",
    "age": 25
}

絞り込むための修飾子を追加することもでき、条件に基づいてオブジェクトのサブセットが返されます。 たとえば、修飾子 people[?age > '25'] を指定すると次のオブジェクトが返されます。

[
  {
    "name": "Fred",
    "age": 28
  },
  {
    "name": "Wilma",
    "age": 27
  }
]

最後に、名前だけを返す select: people[?age > '25'].[name] を追加して、結果を制限することができます。

[
  [
    "Fred"
  ],
  [
    "Wilma"
  ]
]

JMESQuery には、興味深いクエリ機能が他にもいくつかあります。 時間があるときに、オンライン チュートリアルを確認してください。これは JMESPath.org サイトから入手できます。

Azure CLI クエリをフィルター処理する

JMES クエリの基礎知識があれば、クエリによって返されるデータに vm show コマンドのようなフィルターを追加できます。 たとえば、管理者のユーザー名を取得できます。

az vm show \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name SampleVM \
    --query "osProfile.adminUsername"

VM に割り当てられているサイズを取得できます。

az vm show \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name SampleVM \
    --query hardwareProfile.vmSize

または、次のクエリを実行し、ネットワーク インターフェイスのすべての ID を取得できます。

az vm show \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name SampleVM \
    --query "networkProfile.networkInterfaces[].id"

このクエリ手法は、任意の Azure CLI コマンドで機能し、これを使ってコマンド ライン上のデータの特定の部分を取得することができます。 スクリプト作成にも役立ちます。 たとえば、Azure アカウントから値を取得し、それを環境内またはスクリプトの変数に格納することができます。 この方法で使用する場合は、--output tsv パラメーター (-o tsv に短縮可能) を追加すると便利です。 これにより、実際のデータ値とタブ区切りのみを含む結果が返されます。

例:

az vm show \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --name SampleVM \
    --query "networkProfile.networkInterfaces[].id" -o tsv

次のテキストが返されます。/subscriptions/20f4b944-fc7a-4d38-b02c-900c8223c3a0/resourceGroups/2568d0d0-efe3-4d04-a08f-df7f009f822a/providers/Microsoft.Network/networkInterfaces/SampleVMVMNic