Esempi di query di Resource Graph
Il primo passaggio per capire le query con Azure Resource Graph è conoscere i fondamenti del linguaggio di query. Se non si ha familiarità con Esplora dati di Azure, è consigliabile impararne le nozioni di base per capire come comporre richieste in grado di individuare le risorse desiderate.
Si esamineranno le query avanzate seguenti:
- Mostrare la versione dell'API per ogni tipo di risorsa
- Ottenere la capacità e le dimensioni di un set di scalabilità di macchine virtuali
- Rimuovere colonne dai risultati
- Elencare tutti i nomi di tag
- Macchine virtuali individuate da un'espressione regolare
- Elencare Azure Cosmos DB con specifiche posizioni di scrittura
- Insieme di credenziali delle chiavi con il nome della sottoscrizione
- Visualizzare i database SQL e i relativi pool elastici
- Visualizzare le macchine virtuali con relative interfacce di rete e IP pubblici
- Elencare tutte le estensioni installate in una macchina virtuale
- Trovare account di archiviazione con un tag specifico del gruppo di risorse
- Combinare i risultati di due query in un singolo risultato
- Recuperare reti virtuali e subnet delle interfacce di rete
- Riepilogare la macchina virtuale in base alla proprietà estesa stati di alimentazione
Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Supporto di versioni in lingue diverse
Azure Resource Graph è supportato dall'interfaccia della riga di comando di Azure tramite un'estensione e da Azure PowerShell tramite un modulo. Prima di eseguire le query seguenti, verificare che l'ambiente sia pronto. Per i passaggi necessari per installare e convalidare l'ambiente shell preferito, vedere le informazioni relative all'interfaccia della riga di comando di Azure e ad Azure PowerShell.
Mostrare la versione dell'API per ogni tipo di risorsa
Resource Graph usa principalmente la versione non di anteprima più recente dell'API di un provider di risorse per ottenere mediante l'operazione GET
le proprietà delle risorse durante un aggiornamento. In alcuni casi, la versione dell'API usata è stata sottoposta a override per fornire le proprietà più recenti o più usate nei risultati. La query seguente illustra in dettaglio la versione dell'API usata per la raccolta delle proprietà per ogni tipo di risorsa:
Resources
| distinct type, apiVersion
| where isnotnull(apiVersion)
| order by type asc
az graph query -q "Resources | distinct type, apiVersion | where isnotnull(apiVersion) | order by type asc"
Ottenere la capacità e le dimensioni di un set di scalabilità di macchine virtuali
Questa query cerca risorse di set di scalabilità di macchine virtuali e ottiene vari dettagli fra cui le dimensioni della macchina virtuale e la capacità del set di scalabilità. Questa query usa la funzione toint()
per eseguire il cast della capacità in un numero, in modo che possa essere ordinato. Infine, le colonne vengono rinominate in proprietà denominate personalizzate.
Resources
| where type=~ 'microsoft.compute/virtualmachinescalesets'
| where name contains 'contoso'
| project subscriptionId, name, location, resourceGroup, Capacity = toint(sku.capacity), Tier = sku.name
| order by Capacity desc
az graph query -q "Resources | where type=~ 'microsoft.compute/virtualmachinescalesets' | where name contains 'contoso' | project subscriptionId, name, location, resourceGroup, Capacity = toint(sku.capacity), Tier = sku.name | order by Capacity desc"
Rimuovere colonne dai risultati
La query seguente usa summarize
per contare le risorse in base a sottoscrizione, join
per aggiungere i dettagli della sottoscrizione della tabella ResourceContainers, quindi project-away
per rimuovere alcune colonne.
Resources
| summarize resourceCount=count() by subscriptionId
| join (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId
| project-away subscriptionId, subscriptionId1
az graph query -q "Resources | summarize resourceCount=count() by subscriptionId | join (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId| project-away subscriptionId, subscriptionId1"
Elencare tutti i nomi di tag
Questa query inizia con il tag e compila un oggetto JSON che elenca tutti i nomi di tag univoci e i tipi corrispondenti.
Resources
| project tags
| summarize buildschema(tags)
az graph query -q "Resources | project tags | summarize buildschema(tags)"
Macchine virtuali individuate da un'espressione regolare
Questa query cerca le macchine virtuali che corrispondono a un'espressione regolare (nota come regex). matches regex @ permette di definire l'espressione regolare usata per cercare le corrispondenze, ovvero ^Contoso(.*)[0-9]+$
.
Tale definizione di espressione regolare è spiegata come:
^
- La corrispondenza deve cominciare all'inizio della stringa.Contoso
- Stringa con distinzione tra maiuscole e minuscole.(.*)
- Una corrispondenza di espressione secondaria:.
- Trova la corrispondenza di qualsiasi carattere, ad eccezione del carattere nuova riga.*
- Trova la corrispondenza dell'elemento precedente zero o più volte.
[0-9]
- Corrispondenza del gruppo di caratteri per i numeri da 0 a 9.+
- Trova la corrispondenza dell'elemento precedente una o più volte.$
- La corrispondenza dell'elemento precedente deve essere presente alla fine della stringa.
Dopo aver cercato le corrispondenze in base al nome, la query proietta il nome e applica l'ordinamento in base al nome in modo crescente.
Resources
| where type =~ 'microsoft.compute/virtualmachines' and name matches regex @'^Contoso(.*)[0-9]+$'
| project name
| order by name asc
az graph query -q "Resources | where type =~ 'microsoft.compute/virtualmachines' and name matches regex @'^Contoso(.*)[0-9]+\$' | project name | order by name asc"
Elencare Azure Cosmos DB con specifiche posizioni di scrittura
La query seguente si limita alle risorse di Azure Cosmos DB, usa mv-expand
per espandere il contenitore di proprietà per properties.writeLocations, quindi i campi specifici del progetto, e per limitare ulteriormente i risultati ai valori di properties.writeLocations.locationName che corrispondono a 'Stati Uniti orientali' o 'Stati Uniti occidentali'.
Resources
| where type =~ 'microsoft.documentdb/databaseaccounts'
| project id, name, writeLocations = (properties.writeLocations)
| mv-expand writeLocations
| project id, name, writeLocation = tostring(writeLocations.locationName)
| where writeLocation in ('East US', 'West US')
| summarize by id, name
az graph query -q "Resources | where type =~ 'microsoft.documentdb/databaseaccounts' | project id, name, writeLocations = (properties.writeLocations) | mv-expand writeLocations | project id, name, writeLocation = tostring(writeLocations.locationName) | where writeLocation in ('East US', 'West US') | summarize by id, name"
Insieme di credenziali delle chiavi con il nome della sottoscrizione
La query seguente illustra un uso complesso di join
con kind come leftouter. La query limita la tabella aggiunta alle risorse della sottoscrizione e usa project
per includere solo il campo subscriptionId originale e il campo name rinominato in SubName. La ridenominazione del campo evita che join
lo aggiunga come name1, perché il campo esiste già in resources. La tabella originale viene filtrata con where
e l'elemento project
seguente include colonne di entrambe le tabelle. Il risultato della query è che tutti gli insiemi di credenziali delle chiavi visualizzano il tipo, il nome dell'insieme di credenziali delle chiavi e il nome della sottoscrizione in cui è incluso.
Resources
| join kind=leftouter (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId
| where type == 'microsoft.keyvault/vaults'
| project type, name, SubName
az graph query -q "Resources | join kind=leftouter (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type == 'microsoft.keyvault/vaults' | project type, name, SubName"
Visualizzare i database SQL e i relativi pool elastici
La query seguente usa leftouter join
per raggruppare le risorse di Database SQL e i relativi pool elastici, se disponibili.
Resources
| where type =~ 'microsoft.sql/servers/databases'
| project databaseId = id, databaseName = name, elasticPoolId = tolower(tostring(properties.elasticPoolId))
| join kind=leftouter (
Resources
| where type =~ 'microsoft.sql/servers/elasticpools'
| project elasticPoolId = tolower(id), elasticPoolName = name, elasticPoolState = properties.state)
on elasticPoolId
| project-away elasticPoolId1
az graph query -q "Resources | where type =~ 'microsoft.sql/servers/databases' | project databaseId = id, databaseName = name, elasticPoolId = tolower(tostring(properties.elasticPoolId)) | join kind=leftouter ( Resources | where type =~ 'microsoft.sql/servers/elasticpools' | project elasticPoolId = tolower(id), elasticPoolName = name, elasticPoolState = properties.state) on elasticPoolId | project-away elasticPoolId1"
Visualizzare le macchine virtuali con relative interfacce di rete e IP pubblici
Questa query usa due comandi leftouter join
per raggruppare le macchine virtuali create con il modello di distribuzione Resource Manager, le relative interfacce di rete e qualsiasi indirizzo IP pubblico correlato a tali interfacce di rete.
Resources
| where type =~ 'microsoft.compute/virtualmachines'
| extend nics=array_length(properties.networkProfile.networkInterfaces)
| mv-expand nic=properties.networkProfile.networkInterfaces
| where nics == 1 or nic.properties.primary =~ 'true' or isempty(nic)
| project vmId = id, vmName = name, vmSize=tostring(properties.hardwareProfile.vmSize), nicId = tostring(nic.id)
| join kind=leftouter (
Resources
| where type =~ 'microsoft.network/networkinterfaces'
| extend ipConfigsCount=array_length(properties.ipConfigurations)
| mv-expand ipconfig=properties.ipConfigurations
| where ipConfigsCount == 1 or ipconfig.properties.primary =~ 'true'
| project nicId = id, publicIpId = tostring(ipconfig.properties.publicIPAddress.id))
on nicId
| project-away nicId1
| summarize by vmId, vmName, vmSize, nicId, publicIpId
| join kind=leftouter (
Resources
| where type =~ 'microsoft.network/publicipaddresses'
| project publicIpId = id, publicIpAddress = properties.ipAddress)
on publicIpId
| project-away publicIpId1
az graph query -q "Resources | where type =~ 'microsoft.compute/virtualmachines' | extend nics=array_length(properties.networkProfile.networkInterfaces) | mv-expand nic=properties.networkProfile.networkInterfaces | where nics == 1 or nic.properties.primary =~ 'true' or isempty(nic) | project vmId = id, vmName = name, vmSize=tostring(properties.hardwareProfile.vmSize), nicId = tostring(nic.id) | join kind=leftouter ( Resources | where type =~ 'microsoft.network/networkinterfaces' | extend ipConfigsCount=array_length(properties.ipConfigurations) | mv-expand ipconfig=properties.ipConfigurations | where ipConfigsCount == 1 or ipconfig.properties.primary =~ 'true' | project nicId = id, publicIpId = tostring(ipconfig.properties.publicIPAddress.id)) on nicId | project-away nicId1 | summarize by vmId, vmName, vmSize, nicId, publicIpId | join kind=leftouter ( Resources | where type =~ 'microsoft.network/publicipaddresses' | project publicIpId = id, publicIpAddress = properties.ipAddress) on publicIpId | project-away publicIpId1"
Elencare tutte le estensioni installate in una macchina virtuale
Prima di tutto, questa query usa extend
nel tipo di risorsa macchine virtuali per ottenere l'ID in lettere maiuscole (toupper()
), il nome e il tipo del sistema operativo e le dimensioni della macchina virtuale.
L'ID risorsa ottenuto in lettere maiuscole è un modo efficace per preparare il join a un'altra proprietà. Quindi, la query usa join
con kind come leftouter per ottenere le estensioni delle macchine virtuali abbinando un oggetto substring
in leggere maiuscole dell'ID estensione. La parte dell'ID prima di "/extensions/<ExtensionName>" ha lo stesso formato dell'ID macchine virtuali, quindi questa proprietà viene usata per il join
. Viene quindi usato summarize
con make_list
nel nome dell'estensione della macchina virtuale per combinare il nome di ogni estensione in cui i valori di id, OSName, OSType e VMSize sono uguali in una singola proprietà della matrice. Infine verrà applicato order by
al valore di OSName in lettere minuscole con asc. Per impostazione predefinita, order by
è decrescente.
Resources
| where type == 'microsoft.compute/virtualmachines'
| extend
JoinID = toupper(id),
OSName = tostring(properties.osProfile.computerName),
OSType = tostring(properties.storageProfile.osDisk.osType),
VMSize = tostring(properties.hardwareProfile.vmSize)
| join kind=leftouter(
Resources
| where type == 'microsoft.compute/virtualmachines/extensions'
| extend
VMId = toupper(substring(id, 0, indexof(id, '/extensions'))),
ExtensionName = name
) on $left.JoinID == $right.VMId
| summarize Extensions = make_list(ExtensionName) by id, OSName, OSType, VMSize
| order by tolower(OSName) asc
az graph query -q "Resources | where type == 'microsoft.compute/virtualmachines' | extend JoinID = toupper(id), OSName = tostring(properties.osProfile.computerName), OSType = tostring(properties.storageProfile.osDisk.osType), VMSize = tostring(properties.hardwareProfile.vmSize) | join kind=leftouter( Resources | where type == 'microsoft.compute/virtualmachines/extensions' | extend VMId = toupper(substring(id, 0, indexof(id, '/extensions'))), ExtensionName = name ) on \$left.JoinID == \$right.VMId | summarize Extensions = make_list(ExtensionName) by id, OSName, OSType, VMSize | order by tolower(OSName) asc"
Trovare account di archiviazione con un tag specifico del gruppo di risorse
La query seguente usa inner join
per connettere gli account di archiviazione ai gruppi di risorse con un valore e un nome di tag (con distinzione maiuscole/minuscole) specificati.
Resources
| where type =~ 'microsoft.storage/storageaccounts'
| join kind=inner (
ResourceContainers
| where type =~ 'microsoft.resources/subscriptions/resourcegroups'
| where tags['Key1'] =~ 'Value1'
| project subscriptionId, resourceGroup)
on subscriptionId, resourceGroup
| project-away subscriptionId1, resourceGroup1
az graph query -q "Resources | where type =~ 'microsoft.storage/storageaccounts' | join kind=inner ( ResourceContainers | where type =~ 'microsoft.resources/subscriptions/resourcegroups' | where tags['Key1'] =~ 'Value1' | project subscriptionId, resourceGroup) on subscriptionId, resourceGroup | project-away subscriptionId1, resourceGroup1"
Se è necessario cercare un nome di tag e un valore di tag senza distinzione tra maiuscole e minuscole, usare mv-expand
con il parametro bagexpansion. Questa query utilizza una quota maggiore rispetto alla query precedente, di conseguenza, usare mv-expand
solo se necessario.
Resources
| where type =~ 'microsoft.storage/storageaccounts'
| join kind=inner (
ResourceContainers
| where type =~ 'microsoft.resources/subscriptions/resourcegroups'
| mv-expand bagexpansion=array tags
| where isnotempty(tags)
| where tags[0] =~ 'key1' and tags[1] =~ 'value1'
| project subscriptionId, resourceGroup)
on subscriptionId, resourceGroup
| project-away subscriptionId1, resourceGroup1
az graph query -q "Resources | where type =~ 'microsoft.storage/storageaccounts' | join kind=inner ( ResourceContainers | where type =~ 'microsoft.resources/subscriptions/resourcegroups' | mv-expand bagexpansion=array tags | where isnotempty(tags) | where tags[0] =~ 'key1' and tags[1] =~ 'value1' | project subscriptionId, resourceGroup) on subscriptionId, resourceGroup | project-away subscriptionId1, resourceGroup1"
Combinare i risultati di due query in un singolo risultato
La query seguente usa union
per ottenere i risultati della tabella ResourceContainers e aggiungerli ai risultati della tabella Resources.
ResourceContainers
| where type=='microsoft.resources/subscriptions/resourcegroups' | project name, type | limit 5
| union (Resources | project name, type | limit 5)
az graph query -q "ResourceContainers | where type=='microsoft.resources/subscriptions/resourcegroups' | project name, type | limit 5 | union (Resources | project name, type | limit 5)"
Recuperare reti virtuali e subnet delle interfacce di rete
Usare un'espressione regolare parse
per ottenere i nomi della rete virtuale e della subnet dalla proprietà dell’ID della risorsa. Sebbene parse
consente di recuperare i dati da un campo complesso, è ottimo per accedere direttamente alle proprietà, se esistenti, anziché usare parse
.
Resources
| where type =~ 'microsoft.network/networkinterfaces'
| project id, ipConfigurations = properties.ipConfigurations
| mvexpand ipConfigurations
| project id, subnetId = tostring(ipConfigurations.properties.subnet.id)
| parse kind=regex subnetId with '/virtualNetworks/' virtualNetwork '/subnets/' subnet
| project id, virtualNetwork, subnet
az graph query -q "Resources | where type =~ 'microsoft.network/networkinterfaces' | project id, ipConfigurations = properties.ipConfigurations | mvexpand ipConfigurations | project id, subnetId = tostring(ipConfigurations.properties.subnet.id) | parse kind=regex subnetId with '/virtualNetworks/' virtualNetwork '/subnets/' subnet | project id, virtualNetwork, subnet"
Riepilogare la macchina virtuale in base alla proprietà estesa stati di alimentazione
Questa query usa le proprietà estese nelle macchine virtuali per riepilogare in base agli stati di alimentazione.
Resources
| where type == 'microsoft.compute/virtualmachines'
| summarize count() by tostring(properties.extended.instanceView.powerState.code)
az graph query -q "Resources | where type == 'microsoft.compute/virtualmachines' | summarize count() by tostring(properties.extended.instanceView.powerState.code)"
Passaggi successivi
- Vedere esempi di query di base.
- Altre informazioni sul linguaggio di query.
- Altre informazioni su come esplorare le risorse.