Zkoumání prostředků Azure pomocí služby Resource Graph

Azure Resource Graph vám pomůže rychle a ve velkém zkoumat a objevovat prostředky Azure. Navržená pro rychlé odpovědi je skvělý způsob, jak se seznámit s prostředím a také s vlastnostmi, které existují ve vašich prostředcích Azure.

Poznámka:

V závislosti na tabulce Resource Graph se vlastnosti buď shodují s velikostí písmen, jak je znázorněno na webu Azure Portal, nebo budou nižší. Například název skupiny prostředků při dotazování resourceContainers tabulky bude odpovídat portálu, ale resourceGroup vlastnost prostředků z resources tabulky bude malá písmena. To může vést k neočekávaným výsledkům a v dotazech je možné použít operátory porovnání bez rozlišování malých a malých písmen, například =~ místo == a převod vlastností na malá písmena ve spojeních s tolower() funkcí.

Prozkoumání virtuálních počítačů

Běžným prostředkem v Azure je virtuální počítač. Jako typ prostředku mají virtuální počítače mnoho vlastností, které je možné dotazovat. Každá vlastnost nabízí možnost filtrování nebo hledání přesně požadovaného prostředku.

Zjišťování virtuálních počítačů

Začněme jednoduchým dotazem, abychom z našeho prostředí získali jeden virtuální počítač a podívali se na vrácené vlastnosti.

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

Poznámka:

Rutina Azure PowerShellu Search-AzGraphve výchozím nastavení vrátí psResourceGraphResponse . Pokud chcete, aby výstup vypadal stejně jako výsledek vrácený Rozhraním příkazového řádku Azure, ConvertTo-Json použije se rutina ve vlastnosti Data . Výchozí hodnota pro Hloubku je 2. Nastavení na 100 by mělo převést všechny vrácené úrovně.

Výsledky JSON jsou strukturované podobně jako v následujícím příkladu:

[
  {
    "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/contosovm1535",
            "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_9676b7e1b3c44e2cb672338ebe6f5166",
            "resourceGroup": "MyResourceGroup",
            "storageAccountType": "Premium_LRS"
          },
          "name": "ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166",
          "osType": "Windows"
        }
      },
      "vmId": "bbb9b451-6dc7-4117-bec5-c971eb1118c6"
    },
    "resourceGroup": "MyResourceGroup",
    "sku": {},
    "subscriptionId": "<subscriptionId>",
    "tags": {},
    "type": "microsoft.compute/virtualmachines"
  }
]

Vlastnosti nám říkají další informace o samotném prostředku virtuálního počítače. Mezi tyto vlastnosti patří: operační systém, disky, značky a skupina prostředků a předplatné, které je členem.

Virtuální počítače podle umístění

Když jsme se dozvěděli o prostředku virtuálních počítačů, použijeme vlastnost umístění k počítání všech virtuálních počítačů podle umístění. Abychom aktualizovali dotaz, odebereme limit a shrneme počet hodnot umístění.

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

Výsledky JSON jsou strukturované podobně jako v následujícím příkladu:

[
  {
    "count_": 386,
    "location": "eastus"
  },
  {
    "count_": 215,
    "location": "southcentralus"
  },
  {
    "count_": 59,
    "location": "westus"
  }
]

Teď vidíme, kolik virtuálních počítačů máme v každé oblasti Azure.

Virtuální počítače podle skladové položky

Vraťme se k původním vlastnostem virtuálního počítače, zkusme najít všechny virtuální počítače, které mají velikost skladové položky Standard_B2s. Vrácený kód JSON ukazuje, že je uložený ve vlastnosti.hardwareprofile.vmsize. Dotaz aktualizujeme, abychom našli všechny virtuální počítače, které odpovídají této velikosti, a vrátíme jenom název virtuálního počítače a oblasti.

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

Virtuální počítače připojené k diskům spravovaným na premium

Abychom získali podrobnosti o discích spravovaných úrovní Premium, které jsou připojené k těmto Standard_B2s virtuálním počítačům, rozbalíme dotaz, abychom vrátili ID prostředku těchto spravovaných disků.

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

Výsledkem je seznam ID disků.

Zjišťování spravovaných disků

Při prvním záznamu z předchozího dotazu prozkoumáme vlastnosti, které existují na spravovaném disku připojeném k prvnímu virtuálnímu počítači. Aktualizovaný dotaz používá ID disku a změní typ.

Příklad výstupu z předchozího dotazu, například:

[
  {
    "disk_id": "/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166"
  }
]
Resources
| where type =~ 'Microsoft.Compute/disks' and id == '/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166'

Jak jsme věděli , že typ by teď měl být Microsoft.Compute/disks? Pokud se podíváte na celé ID, uvidíte jako součást řetězce /providers/Microsoft.Compute/disks/ . Tento fragment řetězce vám poskytne nápovědu k typu, který chcete vyhledat. Alternativní metodou by bylo odebrat limit podle typu a místo toho hledat pouze podle pole ID. Vzhledem k tomu, že ID je jedinečné, vrátí se pouze jeden záznam a vlastnost typu v něm poskytuje tyto podrobnosti.

Poznámka:

Aby tento příklad fungoval, musíte pole ID nahradit výsledkem z vašeho vlastního prostředí.

az graph query -q "Resources | where type =~ 'Microsoft.Compute/disks' and id == '/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166'"
(Search-AzGraph -Query "Resources | where type =~ 'Microsoft.Compute/disks' and id == '/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166'").Data | ConvertTo-Json

Výsledky JSON jsou strukturované podobně jako v následujícím příkladu:

[
  {
    "id": "/subscriptions/<subscriptionId>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166",
    "kind": "",
    "location": "westus2",
    "managedBy": "",
    "name": "ContosoVM1_OsDisk_1_9676b7e1b3c44e2cb672338ebe6f5166",
    "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"
  }
]

Prozkoumání virtuálních počítačů a vyhledání veřejných IP adres

Tato sada dotazů nejprve najde a uloží všechny prostředky síťových rozhraní (NIC) připojených k virtuálním počítačům. Dotazy pak pomocí seznamu síťových adaptérů vyhledá každý prostředek IP adresy, který je veřejnou IP adresou, a uloží tyto hodnoty. Nakonec dotazy poskytují seznam veřejných IP adres.

# 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

Pomocí souboru (Azure CLI) nebo proměnné (Azure PowerShell) v dalším dotazu získáte podrobnosti o souvisejících prostředcích síťového rozhraní, kde je k síťové kartě připojená veřejná IP adresa.

# 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

Nakonec pomocí seznamu prostředků veřejných IP adres uložených v souboru (Azure CLI) nebo proměnné (Azure PowerShell) získejte skutečnou veřejnou IP adresu ze souvisejícího objektu a zobrazení.

# 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

Pokud chcete zjistit, jak tyto kroky provést v jednom dotazu s operátorem join , podívejte se na seznam virtuálních počítačů s jejich síťovým rozhraním a ukázkou veřejné IP adresy .

Další kroky