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 :
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 :
Microsoft Azure géré par le portail 21Vianet : portal.azure.cn
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.
Kusto
Resources
| where type=~ 'microsoft.compute/virtualmachinescalesets'
| where name contains'contoso'
| project subscriptionId, name, location, resourceGroup, Capacity = toint(sku.capacity), Tier = sku.name
| orderby 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"
Azure PowerShell
Search-AzGraph -Query"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"
Essayez cette requête dans l’Explorateur Azure Resource Graph :
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.
Kusto
Resources
| summarize resourceCount=count() by subscriptionId
| join (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId
| project-away subscriptionId, subscriptionId1
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.
Kusto
Resources
| where type =~ 'microsoft.compute/virtualmachines'and name matchesregex @'^Contoso(.*)[0-9]+$'
| project name
| orderby 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"
Azure PowerShell
Search-AzGraph -Query"Resources | where type =~ 'microsoft.compute/virtualmachines' and name matches regex @'^Contoso(.*)[0-9]+$' | project name | order by name asc"
Essayez cette requête dans l’Explorateur Azure Resource Graph :
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 ».
Kusto
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')
| summarizeby id, name
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.
Kusto
Resources
| joinkind=leftouter (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId
| where type == 'microsoft.keyvault/vaults'
| project type, name, SubName
Lister les machines virtuelles avec leur interface réseau et leur adresse IP publique
Cette requête utilise deux commandes leftouterjoin 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.
Kusto
Resources
| where type =~ 'microsoft.compute/virtualmachines'
| extend nics=array_length(properties.networkProfile.networkInterfaces)
| mv-expand nic=properties.networkProfile.networkInterfaces
| where nics == 1or nic.properties.primary =~ 'true'orisempty(nic)
| project vmId = id, vmName = name, vmSize=tostring(properties.hardwareProfile.vmSize), nicId = tostring(nic.id)
| joinkind=leftouter (
Resources
| where type =~ 'microsoft.network/networkinterfaces'
| extend ipConfigsCount=array_length(properties.ipConfigurations)
| mv-expand ipconfig=properties.ipConfigurations
| where ipConfigsCount == 1or ipconfig.properties.primary =~ 'true'
| project nicId = id, publicIpId = tostring(ipconfig.properties.publicIPAddress.id))
on nicId
| project-away nicId1
| summarizeby vmId, vmName, vmSize, nicId, publicIpId
| joinkind=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.
Kusto
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)
| joinkind=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
| orderbytolower(OSName) asc
Rechercher les comptes de stockage avec une étiquette spécifique sur le groupe de ressources
La requête suivante utilise innerjoin pour connecter des comptes de stockage à des groupes de ressources ayant un nom et une valeur d’étiquette spécifiques qui respectent la casse.
Kusto
Resources
| where type =~ 'microsoft.storage/storageaccounts'
| joinkind=inner (
ResourceContainers
| where type =~ 'microsoft.resources/subscriptions/resourcegroups'
| wheretags['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"
Azure PowerShell
Search-AzGraph -Query"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"
Essayez cette requête dans l’Explorateur Azure Resource Graph :
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é.
Kusto
Resources
| where type =~ 'microsoft.storage/storageaccounts'
| joinkind=inner (
ResourceContainers
| where type =~ 'microsoft.resources/subscriptions/resourcegroups'
| mv-expand bagexpansion=array tags
| whereisnotempty(tags)
| wheretags[0] =~ 'key1'andtags[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.
Kusto
ResourceContainers
| where type=='microsoft.resources/subscriptions/resourcegroups' | project name, type | limit5
| union (Resources | project name, type | limit5)
az graph query -q"ResourceContainers | where type=='microsoft.resources/subscriptions/resourcegroups' | project name, type | limit 5 | union (Resources | project name, type | limit 5)"
Azure PowerShell
Search-AzGraph -Query"ResourceContainers | where type=='microsoft.resources/subscriptions/resourcegroups' | project name, type | limit 5 | union (Resources | project name, type | limit 5)"
Essayez cette requête dans l’Explorateur Azure Resource Graph :
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.
az graph query -q"Resources | where type == 'microsoft.compute/virtualmachines' | summarize count() by tostring(properties.extended.instanceView.powerState.code)"
Azure PowerShell
Search-AzGraph -Query"Resources | where type == 'microsoft.compute/virtualmachines' | summarize count() by tostring(properties.extended.instanceView.powerState.code)"
Essayez cette requête dans l’Explorateur Azure Resource Graph :
Azure HPC est une fonctionnalité cloud conçue spécialement pour les charges de travail HPC et IA, qui utilise des processeurs de pointe et une interconnexion InfiniBand de classe HPC pour offrir les meilleures performances, scalabilité et valeur aux applications. Azure HPC permet aux utilisateurs de laisser libre cours à l’innovation, la productivité et l’agilité métier grâce à une gamme de technologies HPC et IA hautement disponibles qui peuvent être allouées dynamiquement à mesure que vos besoins technico
Écrivez des requêtes efficaces, créez des stratégies d’indexation, gérez et approvisionnez des ressources dans l’API SQL et le Kit de développement logiciel (SDK) avec Microsoft Azure Cosmos DB.
Utilisez Azure Resource Graph pour exécuter certaines requêtes de démarrage, notamment compter des ressources ou les trier, par exemple selon une étiquette spécifique.
Liste d’exemples de requêtes pour Azure Resource Graph. Les catégories incluent Étiquettes, Azure Advisor, Key Vault, Kubernetes, Configuration d’invité, etc.
Découvrez comment le service Azure Resource Graph permet d’exécuter des requêtes complexes sur des ressources à grande échelle entre des abonnements et des locataires.
Exemples de requêtes Azure Resource Graph pour Azure Resource Manager montrant l’utilisation des types de ressources et des tables pour accéder aux ressources et aux propriétés d’Azure Resource Manager.