Explorar os seus recursos do Azure com o Resource Graph
O Azure Resource Graph ajuda-o a explorar e descobrir os seus recursos do Azure de forma rápida e em escala. Projetado para respostas rápidas, é uma ótima maneira de aprender sobre seu ambiente e também sobre as propriedades que existem em seus recursos do Azure.
Nota
Dependendo da tabela do Gráfico de Recursos, as propriedades corresponderão à caixa conforme mostrado no portal do Azure ou serão minúsculas.
Por exemplo, o nome de um grupo de recursos ao consultar a resourceContainers
tabela corresponderá ao portal, mas a resourceGroup
propriedade dos recursos da resources
tabela será minúscula. Isso pode causar resultados inesperados e pode ser contabilizado em suas consultas usando operadores de comparação que não diferenciam maiúsculas de minúsculas, como =~
em vez de ==
converter propriedades em minúsculas em associações com a tolower()
função.
Explore máquinas virtuais
Um recurso comum no Azure é uma máquina virtual. Como um tipo de recurso, as máquinas virtuais têm muitas propriedades que podem ser consultadas. Cada propriedade fornece uma opção para filtrar ou encontrar exatamente o recurso que você está procurando.
Descoberta de máquina virtual
Vamos começar com uma consulta simples para obter uma única máquina virtual do nosso ambiente e examinar as propriedades retornadas.
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
Nota
O cmdlet do Azure PowerShell Search-AzGraph
retorna um PSResourceGraphResponse
por padrão. Para que a saída tenha a mesma aparência do que é retornado pela CLI do Azure, o ConvertTo-Json
cmdlet é usado na Data
propriedade. O valor padrão para Depth
é 2. Defini-lo como 100 deve converter todos os níveis retornados.
Os resultados JSON são estruturados de forma semelhante ao exemplo a seguir:
[
{
"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"
}
]
As propriedades nos informam informações adicionais sobre o próprio recurso de máquina virtual. Essas propriedades incluem: sistema operacional, discos, tags e o grupo de recursos e a assinatura dos quais é membro.
Máquinas virtuais por localização
Com base no que aprendemos sobre o recurso de máquinas virtuais, vamos usar a location
propriedade para contar todas as máquinas virtuais por local. Para atualizar a consulta, removemos o limite e resumimos a contagem de valores de localização.
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
Os resultados JSON são estruturados de forma semelhante ao exemplo a seguir:
[
{
"count_": 386,
"location": "eastus"
},
{
"count_": 215,
"location": "southcentralus"
},
{
"count_": 59,
"location": "westus"
}
]
Agora podemos ver quantas máquinas virtuais temos em cada região do Azure.
Máquinas virtuais por SKU
Voltando às propriedades originais da máquina virtual, vamos tentar encontrar todas as máquinas virtuais que têm um tamanho de SKU de Standard_B2s
. O JSON retornado mostra que o valor está armazenado em properties.hardwareprofile.vmsize
. Atualizamos a consulta para localizar todas as máquinas virtuais (VM) que correspondem a esse tamanho e retornam apenas o nome da VM e da região.
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
Máquinas virtuais conectadas a discos gerenciados premium
Para obter os detalhes dos discos gerenciados premium anexados a essas Standard_B2s
máquinas virtuais, expandimos a consulta para retornar a ID do recurso desses discos gerenciados.
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
O resultado é uma lista de IDs de disco.
Descoberta de disco gerenciado
Com o primeiro registro da consulta anterior, você explora as propriedades existentes no disco gerenciado que foi anexado à primeira máquina virtual. A consulta atualizada usa o ID do disco e altera o tipo.
Exemplo de saída da consulta anterior, por exemplo:
[
{
"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'
Antes de executar a consulta, como sabíamos que o type
deveria ser Microsoft.Compute/disks
agora? Se você olhar para o ID completo, você percebe /providers/Microsoft.Compute/disks/
como parte da cadeia de caracteres. Este fragmento de cadeia de caracteres dá-lhe uma dica sobre o tipo a procurar. Um método alternativo seria remover o limite por tipo e, em vez disso, pesquisar apenas pelo campo ID. Como o ID é exclusivo, apenas um registro seria retornado e a type
propriedade nele fornece esse detalhe.
Nota
Para que este exemplo funcione, você deve substituir o campo ID por um resultado do seu próprio ambiente.
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
Os resultados JSON são estruturados de forma semelhante ao exemplo a seguir:
[
{
"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"
}
]
Explore máquinas virtuais para localizar endereços IP públicos
Esse conjunto de consultas primeiro localiza e armazena todos os recursos de placas de interface de rede (NIC) conectados a máquinas virtuais. Em seguida, as consultas usam a lista de NICs para localizar cada recurso de endereço IP que é um endereço IP público e armazenar esses valores. Finalmente, as consultas fornecem uma lista dos endereços IP públicos.
# 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
Na próxima consulta, use o arquivo (CLI do Azure) ou a variável (Azure PowerShell) para obter os detalhes dos recursos da placa de interface de rede relacionados que têm um endereço IP público anexado à 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
Por último, use a lista de recursos de endereço IP público armazenados no arquivo (CLI do Azure) ou variável (Azure PowerShell) para obter o endereço IP público real do objeto relacionado e exibir.
# 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
Para ver como realizar essas etapas em uma única consulta com o join
operador, vá para Listar máquinas virtuais com sua interface de rede e exemplo de IP público.
Próximos passos
- Saiba mais sobre a linguagem de consulta.
- Veja o idioma em uso nas consultas do Starter.
- Consulte Utilizações avançadas em Consultas avançadas.