Resource Graph を使用してご利用の Azure リソースを探索するExplore your Azure resources with Resource Graph

Azure Resource Graph では、し、Azure リソースを迅速かつ大規模に探索および確認する機能が提供されています。Azure Resource Graph provides the ability to explore and discover your Azure resources quickly and at scale. 迅速に応答するよう設計されており、ご利用の環境のほか、Azure リソースを構成するプロパティの詳細を確認する優れた手段となっています。Engineered for fast responses, it's a great way to learn about your environment and also about the properties that make up your Azure resources.

仮想マシンの詳細を確認するExplore virtual machines

Azure の一般的なリソースは仮想マシンです。A common resource in Azure is a virtual machine. リソースの一種である仮想マシンは、クエリの対象になる多数のプロパティを備えています。As a resource type, virtual machines have many properties that can be queried. 各プロパティには、探しているリソースだけをフィルター処理して見つけるためのオプションがあります。Each property provides an option for filtering or finding exactly the resource you're looking for.

仮想マシンの確認Virtual machine discovery

まずは、環境から 1 つの VM を取得し、返されるプロパティを確認する簡単なクエリを実行してみましょう。Let's start with a simple query to get a single VM from our environment and look at the properties returned.

Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| limit 1
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | limit 1"
Search-AzGraph -Query "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | limit 1" | ConvertTo-Json -Depth 100

注意

Azure PowerShell Search-AzGraph コマンドレットは、既定で PSCustomObject を返します。The Azure PowerShell Search-AzGraph cmdlet returns a PSCustomObject by default. Azure CLI から返される内容と同様の出力にするには、ConvertTo-Json コマンドレットを使用します。To have the output look the same as what is returned by Azure CLI, the ConvertTo-Json cmdlet is used. Depth の既定値は 2 です。The default value for Depth is 2. 100 に設定すると、返されたすべてのレベルが変換されます。Setting it to 100 should convert all returned levels.

JSON 結果は次の例のように構成されます。The JSON results are structured similar to the following example:

[
  {
    "id": "/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/ContosoVM1",
    "kind": "",
    "location": "westus2",
    "managedBy": "",
    "name": "ContosoVM1",
    "plan": {},
    "properties": {
      "hardwareProfile": {
        "vmSize": "Standard_B2s"
      },
      "networkProfile": {
        "networkInterfaces": [
          {
            "id": "/subscriptions/<subscriptionId>/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/contosovm1535",
            "resourceGroup": "MyResourceGroup"
          }
        ]
      },
      "osProfile": {
        "adminUsername": "localAdmin",
        "computerName": "ContosoVM1",
        "secrets": [],
        "windowsConfiguration": {
          "enableAutomaticUpdates": true,
          "provisionVMAgent": true
        }
      },
      "provisioningState": "Succeeded",
      "storageProfile": {
        "dataDisks": [],
        "imageReference": {
          "offer": "WindowsServer",
          "publisher": "MicrosoftWindowsServer",
          "sku": "2016-Datacenter",
          "version": "latest"
        },
        "osDisk": {
          "caching": "ReadWrite",
          "createOption": "FromImage",
          "diskSizeGB": 127,
          "managedDisk": {
            "id": "/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166",
            "resourceGroup": "MyResourceGroup",
            "storageAccountType": "Premium_LRS"
          },
          "name": "ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166",
          "osType": "Windows"
        }
      },
      "vmId": "bbb9b451-6dc7-4117-bec5-c971eb1118c6"
    },
    "resourceGroup": "MyResourceGroup",
    "sku": {},
    "subscriptionId": "<subscriptionId>",
    "tags": {},
    "type": "microsoft.compute/virtualmachines"
  }
]

プロパティは、仮想マシン リソース自体に関する追加情報 (SKU、OS、ディスク、タグなどのすべての情報)、およびリソースが属しているリソース グループとサブスクリプションに関する追加情報を提供します。The properties tell us additional information about the virtual machine resource itself, everything from SKU, OS, disks, tags, and the resource group and subscription it's a member of.

場所別の仮想マシンVirtual machines by location

仮想マシンのリソースについて学習した内容を念頭に置き、location プロパティ使用して、すべての仮想マシンを場所別にカウントしてみましょう。Taking what we learned about the virtual machines resource, let's use the location property to count all virtual machines by location. クエリを更新するために、制限を削除し、場所の値の数を集計します。To update the query, we'll remove the limit and summarize the count of location values.

Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| summarize count() by location
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | summarize count() by location"
Search-AzGraph -Query "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | summarize count() by location"

JSON 結果は次の例のように構成されます。The JSON results are structured similar to the following example:

[
  {
    "count_": 386,
    "location": "eastus"
  },
  {
    "count_": 215,
    "location": "southcentralus"
  },
  {
    "count_": 59,
    "location": "westus"
  }
]

これで、各 Azure リージョンにある仮想マシンの数を確認できました。We can now see how many virtual machines we have in each Azure region.

SKU 別の仮想マシンVirtual machines by SKU

仮想マシンの元のプロパティに戻って、SKU サイズが Standard_B2s であるすべての仮想マシンを見つけましょう。Going back to the original virtual machine properties, let's try to find all the virtual machines that have a SKU size of Standard_B2s. 返される JSON を確認すると、properties.hardwareprofile.vmsize に格納されることがわかります。Looking at the JSON returned, we see that it's stored in properties.hardwareprofile.vmsize. このサイズと一致するすべての VM を見つけて、VM およびリージョンの名前だけを返すように、クエリを更新します。We'll update the query to find all VMs that match this size and return just the name of the VM and region.

Resources
| where type =~ 'Microsoft.Compute/virtualMachines' and properties.hardwareProfile.vmSize == 'Standard_B2s'
| project name, resourceGroup
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualMachines' and properties.hardwareProfile.vmSize == 'Standard_B2s' | project name, resourceGroup"
Search-AzGraph -Query "Resources | where type =~ 'Microsoft.Compute/virtualMachines' and properties.hardwareProfile.vmSize == 'Standard_B2s' | project name, resourceGroup"

プレミアム マネージド ディスクに接続された仮想マシンVirtual machines connected to premium-managed disks

これらの Standard_B2S 仮想マシンに接続されているプレミアム マネージド ディスクの詳細情報を得るには、これらのマネージド ディスクのリソース ID を提供するようにクエリを拡張します。If we wanted to get the details of premium-managed disks that are attached to these Standard_B2s virtual machines, we can expand the query to give us the resource ID of those managed disks.

Resources
| where type =~ 'Microsoft.Compute/virtualmachines' and properties.hardwareProfile.vmSize == 'Standard_B2s'
| extend disk = properties.storageProfile.osDisk.managedDisk
| where disk.storageAccountType == 'Premium_LRS'
| project disk.id

注意

SKU を取得するもう 1 つの方法としては、aliases プロパティ Microsoft.Compute/virtualMachines/sku.name を使用します。Another way to get the SKU would have been by using the aliases property Microsoft.Compute/virtualMachines/sku.name. エイリアスの表示個別エイリアス値を表示の例を参照してください。See the Show aliases and Show distinct alias values examples.

az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualmachines' and properties.hardwareProfile.vmSize == 'Standard_B2s' | extend disk = properties.storageProfile.osDisk.managedDisk | where disk.storageAccountType == 'Premium_LRS' | project disk.id"
Search-AzGraph -Query "Resources | where type =~ 'Microsoft.Compute/virtualmachines' and properties.hardwareProfile.vmSize == 'Standard_B2s' | extend disk = properties.storageProfile.osDisk.managedDisk | where disk.storageAccountType == 'Premium_LRS' | project disk.id"

結果は、ディスク ID の一覧です。The result is a list of disk IDs.

マネージド ディスクの確認Managed disk discovery

前のクエリから最初のレコードを取得して、最初の仮想マシンに接続されていたマネージド ディスクに存在するプロパティを確認します。With the first record from the previous query, we'll explore the properties that exist on the managed disk that was attached to the first virtual machine. 更新されたクエリでは、ディスク ID を使用し、種類を変更します。The updated query uses the disk ID and changes the type.

前のクエリからの出力例を次に示します。Example output from the previous query for example:

[
  {
    "disk_id": "/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166"
  }
]
Resources
| where type =~ 'Microsoft.Compute/disks' and id == '/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166'

クエリを実行する前に、typeMicrosoft.Compute/disks であることがなぜわかるかを見てみましょう。Before running the query, how did we know the type should now be Microsoft.Compute/disks? 完全な ID を確認すると、文字列の一部が /providers/Microsoft.Compute/disks/ となっています。If you look at the full ID, you'll see /providers/Microsoft.Compute/disks/ as part of the string. この文字列の部分から、検索対象となる種類がわかります。This string fragment gives you a hint as to what type to search for. 別の方法としては、種類による制限を削除し、代わりに ID フィールドだけを使用して検索を行います。An alternative method would be to remove the limit by type and instead only search by the ID field. ID は一意なので、1 つのレコードだけが返され、含まれる type プロパティによってその詳細情報が提供されます。As the ID is unique, only one record would be returned and the type property on it provides that detail.

注意

この例を動作させるには、ID フィールドを、独自の環境の結果に置き換える必要があります。For this example to work, you must replace the ID field with a result from your own environment.

az graph query -q "Resources | where type =~ 'Microsoft.Compute/disks' and id == '/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166'"
Search-AzGraph -Query "Resources | where type =~ 'Microsoft.Compute/disks' and id == '/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166'"

JSON 結果は次の例のように構成されます。The JSON results are structured similar to the following example:

[
  {
    "id": "/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166",
    "kind": "",
    "location": "westus2",
    "managedBy": "",
    "name": "ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166",
    "plan": {},
    "properties": {
      "creationData": {
        "createOption": "Empty"
      },
      "diskSizeGB": 127,
      "diskState": "ActiveSAS",
      "provisioningState": "Succeeded",
      "timeCreated": "2018-09-14T12:17:32.2570000Z"
    },
    "resourceGroup": "MyResourceGroup",
    "sku": {
      "name": "Premium_LRS",
      "tier": "Premium"
    },
    "subscriptionId": "<subscriptionId>",
    "tags": {
      "environment": "prod"
    },
    "type": "microsoft.compute/disks"
  }
]

仮想マシンを探索してパブリック IP アドレスを確認するExplore virtual machines to find public IP addresses

この一連のクエリでは、最初に仮想マシンに接続されているすべてのネットワーク インターフェイス (NIC) リソースが検索され、それらが格納されます。This set of queries first finds and stores all the network interfaces (NIC) resources connected to virtual machines. 次に、NIC の一覧を使用して、パブリック IP アドレスである各 IP アドレスのリソースが検索され、それらの値が格納されます。Then the queries use the list of NICs to find each IP address resource that is a public IP address and store those values. 最後に、パブリック IP アドレスの一覧が提供されます。Finally, the queries provide a list of the public IP addresses.

# Use Resource Graph to get all NICs and store in the 'nics.txt' file
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | project nic = tostring(properties['networkProfile']['networkInterfaces'][0]['id']) | where isnotempty(nic) | distinct nic | limit 20" --output table | tail -n +3 > nics.txt

# Review the output of the query stored in 'nics.txt'
cat nics.txt
# Use Resource Graph to get all NICs and store in the $nics variable
$nics = Search-AzGraph -Query "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | project nic = tostring(properties['networkProfile']['networkInterfaces'][0]['id']) | where isnotempty(nic) | distinct nic | limit 20"

# Review the output of the query stored in the variable
$nics.nic

次のクエリでは、ファイル (Azure CLI) または変数 (Azure PowerShell) を使用して、関連するネットワーク インターフェイス リソースの詳細情報を取得します。これには、NIC にアタッチされているパブリック IP アドレスが含まれます。Use the file (Azure CLI) or variable (Azure PowerShell) in the next query to get the related network interface resources details where there's a public IP address attached to the NIC.

# Use Resource Graph with the 'nics.txt' file to get all related public IP addresses and store in 'publicIp.txt' file
az graph query -q="Resources | where type =~ 'Microsoft.Network/networkInterfaces' | where id in ('$(awk -vORS="','" '{print $0}' nics.txt | sed 's/,$//')') | project publicIp = tostring(properties['ipConfigurations'][0]['properties']['publicIPAddress']['id']) | where isnotempty(publicIp) | distinct publicIp" --output table | tail -n +3 > ips.txt

# Review the output of the query stored in 'ips.txt'
cat ips.txt
# Use Resource Graph  with the $nics variable to get all related public IP addresses and store in $ips variable
$ips = Search-AzGraph -Query "Resources | where type =~ 'Microsoft.Network/networkInterfaces' | where id in ('$($nics.nic -join "','")') | project publicIp = tostring(properties['ipConfigurations'][0]['properties']['publicIPAddress']['id']) | where isnotempty(publicIp) | distinct publicIp"

# Review the output of the query stored in the variable
$ips.publicIp

最後に、ファイル (Azure CLI) または変数 (Azure PowerShell) に格納されているパブリック IP アドレス リソースの一覧を使用して、関連するオブジェクトから実際のパブリック IP アドレスを取得して表示します。Last, use the list of public IP address resources stored in the file (Azure CLI) or variable (Azure PowerShell) to get the actual public IP address from the related object and display.

# Use Resource Graph with the 'ips.txt' file to get the IP address of the public IP address resources
az graph query -q="Resources | where type =~ 'Microsoft.Network/publicIPAddresses' | where id in ('$(awk -vORS="','" '{print $0}' ips.txt | sed 's/,$//')') | project ip = tostring(properties['ipAddress']) | where isnotempty(ip) | distinct ip" --output table
# Use Resource Graph with the $ips variable to get the IP address of the public IP address resources
Search-AzGraph -Query "Resources | where type =~ 'Microsoft.Network/publicIPAddresses' | where id in ('$($ips.publicIp -join "','")') | project ip = tostring(properties['ipAddress']) | where isnotempty(ip) | distinct ip"

join 演算子を使用して 1 つのクエリでこれらの手順を行う方法については、仮想マシン、ネットワーク インターフェイス、パブリック IP を一覧表示するサンプルを参照してください。To see how to accomplish these steps in a single query with the join operator, see the List virtual machines with their network interface and public IP sample.

次のステップNext steps