Exemples de requêtes Resource Graph avancées
Pour comprendre comment fonctionnent les requêtes dans Azure Resource Graph, vous devez au préalable vous familiariser avec le langage de requête. Si vous ne connaissez pas bien l’Explorateur de données Azure, nous vous recommandons de passer en revue les notions de base de ce langage pour apprendre à composer des requêtes pour les ressources qui vous intéressent.
Nous allons vous guider tout au long des requêtes avancées suivantes :
- Afficher la version d’API pour chaque type de ressource
- Obtenir une capacité et une taille de groupe de machines virtuelles identiques
- Supprimer des colonnes des résultats
- Lister tous les noms d’étiquette
- Machines virtuelles mises en correspondance par expression régulière
- Lister Azure Cosmos DB avec des emplacements d’écriture spécifiques
- Coffre de clés avec nom d’abonnement
- Lister les bases de données SQL et leurs pools élastiques
- Lister les machines virtuelles avec leur interface réseau et leur adresse IP publique
- Lister toutes les extensions installées sur une machine virtuelle
- Rechercher les comptes de stockage avec une étiquette spécifique sur le groupe de ressources
- Combiner les résultats de deux requêtes en un résultat unique
- Obtenir les réseaux virtuels et les sous-réseaux des interfaces réseau
- Synthétiser la machine virtuelle par la propriété étendue des états d’alimentation
Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Support multilingue
Azure CLI (par le biais d’une extension) et Azure PowerShell (par le biais d’un module) prennent en charge Azure Resource Graph. Avant d’exécuter les requêtes suivantes, vérifiez que votre environnement est prêt. Consultez Azure CLI et Azure PowerShell pour savoir comment installer et valider l’environnement de votre interpréteur de commandes.
Afficher la version d’API pour chaque type de ressource
Resource Graph utilise principalement la version autre que la préversion la plus récente de l’API d’un fournisseur de ressources pour GET
les propriétés des ressources pendant une mise à jour. Dans certains cas, la version d’API utilisée a été remplacée pour fournir des propriétés plus courantes ou largement employées dans les résultats. La requête suivante détaille la version d’API utilisée pour collecter des propriétés sur chaque type de ressource :
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"
Obtenir une capacité et une taille de groupe de machines virtuelles identiques
Cette requête recherche des ressources de groupe de machines virtuelles identiques et obtient divers détails, notamment la taille de machine virtuelle et la capacité du groupe identique. Cette requête utilise la fonction toint()
pour effectuer un cast de la capacité sur un nombre afin de pouvoir la trier. Enfin, les colonnes sont renommées dans les propriétés nommées personnalisées.
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"
Supprimer des colonnes des résultats
La requête suivante utilise summarize
pour compter les ressources par abonnement, join
pour les associer aux détails de l’abonnement à partir de la table ResourceContainers, puis project-away
pour supprimer certaines des colonnes.
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"
Lister tous les noms d’étiquette
Cette requête commence par l’étiquette et génère un objet JSON listant tous les noms d’étiquette uniques et leurs types correspondants.
Resources
| project tags
| summarize buildschema(tags)
az graph query -q "Resources | project tags | summarize buildschema(tags)"
Machines virtuelles mises en correspondance par expression régulière
Cette requête recherche les machines virtuelles qui correspondent à une expression régulière (connue sous le nom regex). La valeur correspond à regex @ nous permet de définir l’expression régulière de correspondance, c’est-à-dire ^Contoso(.*)[0-9]+$
.
Cette définition d’expression régulière est expliquée comme suit :
^
: doit correspondance au début au commencement de la chaîne.Contoso
: chaîne sensible à la casse.(.*)
: correspondance de sous-expression :.
: correspond à n'importe quel caractère unique (sauf une nouvelle ligne).*
: correspond à l’élément précédent zéro fois ou plusieurs fois.
[0-9]
: correspondance de groupe de caractères pour les nombres de 0 à 9.+
: correspond à l’élément précédent une fois ou plusieurs fois.$
: la correspondance avec l’élément précédent doit se produire à la fin de la chaîne.
Après la mise en correspondance par nom, la requête projette le nom et effectue le tri par nom croissant.
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"
Lister Azure Cosmos DB avec des emplacements d’écriture spécifiques
La requête suivante se limite aux ressources Azure Cosmos DB, utilise mv-expand
afin de développer le jeu de propriétés pour properties.writeLocations, puis projeter des champs spécifiques et limiter les résultats aux valeurs properties.writeLocations.locationName correspondant à « East US » ou « West US ».
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"
Coffre de clés avec nom d’abonnement
La requête suivante illustre une utilisation complexe de join
avec le leftouterkind. La requête limite la table jointe aux ressources d’abonnement et utilise project
pour inclure uniquement le champ d’origine subscriptionId et le champ name renommé SubName. Le renommage de champ évite que join
ne l’ajoute en tant que name1, puisque le champ existe déjà dans resources. La table d’origine est filtrée avec where
et le project
suivant comprend des colonnes des deux tables. Résultat de la requête : tous les coffres de clés affichent le type, le nom du coffre de clés et le nom de l’abonnement dans lequel il se trouve.
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"
Lister les bases de données SQL et leurs pools élastiques
La requête suivante utilise leftouter join
pour réunir des ressources SQL Database et leurs pools élastiques associés, le cas échéant.
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"
Lister les machines virtuelles avec leur interface réseau et leur adresse IP publique
Cette requête utilise deux commandes leftouter join
pour réunir des machines virtuelles créées avec le modèle de déploiement Resource Manager, leurs interfaces réseau associées et toute adresse IP publique associée à ces interfaces réseau.
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"
Lister toutes les extensions installées sur une machine virtuelle
Tout d’abord, cette requête utilise extend
sur le type de ressource des machines virtuelles pour obtenir l’ID en majuscules (toupper()
), obtenir le nom et le type du système d’exploitation, et obtenir la taille des machines virtuelles.
L’obtention de l’ID de ressource en majuscules est un bon moyen de préparer la jointure à une autre propriété. Ensuite, la requête utilise join
avec kind comme leftouter pour obtenir les extensions de machine virtuelle en faisant correspondre une substring
en majuscules de l’ID d’extension. La partie de l’ID avant « /extensions/<ExtensionName> » est du même format que l’ID des machines virtuelles. Nous utilisons donc cette propriété pour join
. summarize
est ensuite utilisé avec make_list
sur le nom de l’extension de machine virtuelle pour combiner le nom de chaque extension où id, OSName, OSType et VMSize sont les mêmes dans une propriété de tableau unique. Enfin, nous ordonnons (order by
) le nom OSName en minuscules avec asc. Par défaut, order by
est décroissant.
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"
Rechercher les comptes de stockage avec une étiquette spécifique sur le groupe de ressources
La requête suivante utilise inner join
pour connecter des comptes de stockage à des groupes de ressources ayant un nom et une valeur d’étiquette spécifiques qui respectent la casse.
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"
S’il est nécessaire de rechercher un nom et une valeur d’étiquette qui ne respectent pas la casse, utilisez mv-expand
avec le paramètre bagexpansion. Dans la mesure où cette requête utilise plus de quota que la requête précédente, utilisez mv-expand
uniquement en cas de nécessité.
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"
Combiner les résultats de deux requêtes en un résultat unique
La requête suivante utilise union
pour obtenir les résultats de la table ResourceContainers et les ajouter aux résultats de la table 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)"
Récupérer les réseaux virtuels et les sous-réseaux des interfaces réseau
Utilisez une expression régulière parse
pour obtenir les noms des réseaux virtuels et des sous-réseaux à partir de la propriété ID de ressource. Bien que parse
permette d’obtenir des données à partir d’un champ complexe, il est préférable d’accéder directement aux propriétés si elles existent, au lieu d’utiliser 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"
Synthétiser la machine virtuelle par la propriété étendue des états d’alimentation
Cette requête utilise les propriétés étendues sur les machines virtuelles pour synthéthiser par états d’alimentation.
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)"
Étapes suivantes
- Consulter des exemples de requêtes de démarrage.
- Découvrez plus en détails le langage de requête.
- Découvrez plus en détails comment explorer des ressources.