Menjelajahi sumber daya Azure Anda dengan Resource Graph

Azure Resource Graph menyediakan kemampuan untuk menjelajahi dan menemukan sumber daya Azure dengan cepat dan dalam skala besar. Direkayasa untuk respons cepat, ini adalah cara yang bagus untuk mempelajari lingkungan Anda dan juga tentang properti yang ada di sumber daya Azure Anda.

Menjelajahi komputer virtual

Sumber daya umum di Azure adalah komputer virtual. Sebagai jenis sumber daya, komputer virtual memiliki banyak properti yang dapat dikueri. Setiap properti menyediakan opsi untuk memfilter atau menemukan sumber daya yang Anda cari.

Penemuan komputer virtual

Mari memulai dengan kueri sederhana untuk mendapatkan satu komputer virtual dari lingkungan dan melihat properti yang ditampilkan.

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").Data | ConvertTo-Json -Depth 100

Catatan

Cmdlet Search-AzGraph Azure PowerShell menampilkan PSResourceGraphResponse secara default. Agar output terlihat sama dengan apa yang ditampilkan oleh Azure CLI, cmdlet ConvertTo-Json digunakan pada properti Data. Nilai default untuk Kedalaman adalah 2. Mengaturnya ke 100 akan mengonversi semua level yang ditampilkan.

Hasil JSON disusun mirip dengan contoh berikut:

[
  {
    "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"
  }
]

Properti memberi tahu kami informasi tambahan tentang sumber daya komputer virtual itu sendiri. Properti ini meliputi: sistem operasi, disk, tag, dan grup sumber daya serta langganan tempatnya menjadi anggotanya.

Komputer virtual berdasarkan lokasi

Mengambil apa yang dipelajari tentang sumber daya komputer virtual, mari gunakan properti location untuk menghitung semua komputer virtual berdasarkan lokasi. Untuk memperbarui kueri, kami akan menghapus batas dan meringkas jumlah nilai lokasi.

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").Data | ConvertTo-Json

Hasil JSON disusun mirip dengan contoh berikut:

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

Kami sekarang dapat melihat berapa banyak komputer virtual yang dimiliki di setiap wilayah Azure.

Komputer virtual berdasarkan SKU

Kembali ke properti komputer virtual asli, mari coba untuk menemukan semua komputer virtual yang memiliki ukuran SKU Standard_B2s. Melihat JSON ditampilkan, kami melihat bahwa ini disimpan di properties.hardwareprofile.vmsize. Kami akan memperbarui kueri untuk menemukan semua VM yang cocok dengan ukuran ini dan menampilkan hanya nama VM dan wilayah.

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").Data | ConvertTo-Json

Komputer virtual yang tersambung ke disk terkelola premium

Untuk mendapatkan detail disk terkelola premium yang dilampirkan pada komputer virtual Standard_B2s ini, kami memperluas kueri untuk menampilkan ID sumber daya disk terkelola tersebut.

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
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").Data | ConvertTo-Json

Hasilnya adalah daftar ID disk.

Penemuan disk terkelola

Dengan rekaman pertama dari kueri sebelumnya, kami akan menjelajahi properti yang ada pada disk terkelola yang dilampirkan ke komputer virtual pertama. Kueri yang diperbarui menggunakan ID disk dan mengubah jenis.

Contoh output dari kueri sebelumnya misalnya:

[
  {
    "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'

Sebelum menjalankan kueri, bagaimana kami tahu jenis sekarang harus berupa Microsoft.Compute/disks? Jika melihat ID lengkap, Anda akan melihat /providers/Microsoft.Compute/disks/ sebagai bagian dari string. Fragmen string ini memberi Anda petunjuk tentang jenis apa yang akan dicari. Metode alternatif adalah menghapus batas berdasarkan jenis dan sebaliknya hanya mencari berdasarkan bidang ID. Karena ID unik, hanya satu catatan yang akan ditampilkan dan properti jenis di dalamnya memberikan detail tersebut.

Catatan

Agar contoh ini berfungsi, Anda harus mengganti bidang ID dengan hasil dari lingkungan Anda sendiri.

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'").Data | ConvertTo-Json

Hasil JSON disusun mirip dengan contoh berikut:

[
  {
    "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"
  }
]

Menjelajahi komputer virtual untuk menemukan alamat IP publik

Kumpulan kueri ini pertama kali menemukan dan menyimpan semua sumber daya antarmuka jaringan (NIC) yang tersambung ke komputer virtual. Kemudian kueri menggunakan daftar NIC untuk menemukan setiap sumber daya alamat IP yang merupakan alamat IP publik dan menyimpan nilai-nilai tersebut. Terakhir, kueri menyediakan daftar alamat IP publik.

# 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").Data

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

Gunakan file (Azure CLI) atau variabel (Azure PowerShell) di kueri berikutnya untuk mendapatkan detail sumber daya antarmuka jaringan terkait tempat ada alamat IP publik yang dilampirkan ke 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").Data

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

Terakhir, gunakan daftar sumber daya alamat IP publik yang disimpan dalam file (Azure CLI) atau variabel (Azure PowerShell) untuk mendapatkan alamat IP publik yang sebenarnya dari objek dan tampilan terkait.

# 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").Data | ConvertTo-Json

Untuk melihat cara menyelesaikan langkah-langkah ini dalam satu kueri dengan operator join, lihat Mencantumkan komputer virtual dengan antarmuka jaringan dan sampel IP publik.

Langkah berikutnya