Menjelajahi sumber daya Azure Anda dengan Resource Graph
Azure Resource Graph membantu Anda menjelajahi dan menemukan sumber daya Azure Anda 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.
Catatan
Bergantung pada tabel Resource Graph, properti akan cocok dengan casing seperti yang ditunjukkan dalam portal Azure atau huruf kecil.
Misalnya, nama grup sumber daya saat mengkueri resourceContainers
tabel akan cocok dengan portal, tetapi resourceGroup
properti sumber daya dari resources
tabel akan menjadi huruf kecil. Ini dapat menyebabkan hasil yang tidak terduga dan dapat diperhitungkan dalam kueri Anda menggunakan operator perbandingan yang tidak peka huruf besar/kecil seperti =~
alih-alih ==
dan mengonversi properti menjadi huruf kecil dalam gabungan dengan tolower()
fungsi.
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 Azure PowerShell Search-AzGraph
mengembalikan PSResourceGraphResponse
secara default. Agar output terlihat sama dengan apa yang dikembalikan oleh Azure CLI, ConvertTo-Json
cmdlet digunakan pada Data
properti . Nilai default untuk Depth
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/contosovm2222",
"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_11111111111111111111111111111111",
"resourceGroup": "MyResourceGroup",
"storageAccountType": "Premium_LRS"
},
"name": "ContosoVM1_OsDisk_1_11111111111111111111111111111111",
"osType": "Windows"
}
},
"vmId": "11111111-1111-1111-1111-111111111111"
},
"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 kita pelajari tentang sumber daya komputer virtual, mari kita gunakan location
properti untuk menghitung semua komputer virtual berdasarkan lokasi. Untuk memperbarui kueri, kami 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 kita coba temukan semua komputer virtual yang memiliki ukuran Standard_B2s
SKU . JSON yang dikembalikan menunjukkan nilai disimpan di properties.hardwareprofile.vmsize
. Kami memperbarui kueri untuk menemukan semua komputer virtual (VM) yang cocok dengan ukuran ini dan hanya mengembalikan 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 yang dikelola premium yang dilampirkan ke komputer virtual ini Standard_B2s
, kami memperluas kueri untuk mengembalikan ID sumber daya dari 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, Anda menjelajahi properti yang ada di 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_11111111111111111111111111111111"
}
]
Resources
| where type =~ 'Microsoft.Compute/disks' and id == '/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_11111111111111111111111111111111'
Sebelum Anda menjalankan kueri, bagaimana kita tahu type
seharusnya sekarang Microsoft.Compute/disks
? Jika Anda 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 rekaman yang akan dikembalikan dan properti di dalamnya menyediakan detail tersebut type
.
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_11111111111111111111111111111111'"
(Search-AzGraph -Query "Resources | where type =~ 'Microsoft.Compute/disks' and id == '/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_11111111111111111111111111111111'").Data | ConvertTo-Json
Hasil JSON disusun mirip dengan contoh berikut:
[
{
"id": "/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_11111111111111111111111111111111",
"kind": "",
"location": "westus2",
"managedBy": "",
"name": "ContosoVM1_OsDisk_1_11111111111111111111111111111111",
"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 kartu antarmuka jaringan (NIC) yang terhubung 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
Dalam kueri berikutnya, gunakan file (Azure CLI) atau variabel (Azure PowerShell), untuk mendapatkan detail sumber daya kartu antarmuka jaringan terkait yang memiliki 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 join
operator, buka Mencantumkan komputer virtual dengan antarmuka jaringan dan sampel IP publik mereka.
Langkah berikutnya
- Pelajari lebih lanjut tentang bahasa kueri.
- Lihat bahasa yang digunakan dalam Kueri starter.
- Lihat penggunaan tingkat lanjut dalam Kueri tingkat lanjut.