Skip to content

Instantly share code, notes, and snippets.

@amgdy
Last active July 30, 2026 07:32
Show Gist options
  • Select an option

  • Save amgdy/27ed76ae9eb5a0f60eb295df6282b3d6 to your computer and use it in GitHub Desktop.

Select an option

Save amgdy/27ed76ae9eb5a0f60eb295df6282b3d6 to your computer and use it in GitHub Desktop.
Azure inventory — every resource CLASSIFIED into a service category
// =====================================================================
// Azure inventory — every resource CLASSIFIED into its OFFICIAL Azure
// product category (azure.microsoft.com/products). Full catalog coverage.
// - `family` = official product category
// - `serviceName` = official product name (kind-aware for AI)
// - `size` = the right sizing meter per category
// 'Other / Uncategorized' catches anything unmapped (gap-check bucket).
// AKS/ARO expand to one row per node pool.
// Run: az graph query -q "$(cat azure-inventory-classified.kql)" --first 1000 -o table
// =====================================================================
resources
| extend skuName = coalesce(tostring(sku.name), tostring(properties.sku.name))
| extend skuTier = coalesce(tostring(sku.tier), tostring(properties.sku.tier), tostring(properties.tier))
| extend skuFamily = coalesce(tostring(sku.family), tostring(properties.sku.family))
| extend skuCapacity = coalesce(tostring(sku.capacity), tostring(properties.sku.capacity))
| extend _pools = iff(type =~ 'microsoft.containerservice/managedclusters' and coalesce(array_length(properties.agentPoolProfiles),0) > 0, properties.agentPoolProfiles, dynamic([{}]))
| mv-expand pool = _pools
| extend nodePool = tostring(pool.name)
| extend _roles = iff(type =~ 'microsoft.hdinsight/clusters' and coalesce(array_length(properties.computeProfile.roles),0) > 0, properties.computeProfile.roles, dynamic([{}]))
| mv-expand role = _roles
| extend tier = skuTier
| extend computeSize = case(
type =~ 'microsoft.compute/virtualmachines', tostring(properties.hardwareProfile.vmSize),
type =~ 'microsoft.compute/virtualmachinescalesets', tostring(sku.name),
type =~ 'microsoft.containerservice/managedclusters', tostring(pool.vmSize),
type =~ 'microsoft.azurefleet/fleets', tostring(properties.vmSizesProfile[0].name),
type =~ 'microsoft.virtualmachineimages/imagetemplates', tostring(properties.vmProfile.vmSize),
type =~ 'microsoft.hdinsight/clusters', tostring(role.hardwareProfile.vmSize),
'')
| extend osType = case(
type =~ 'microsoft.compute/virtualmachines', tostring(properties.storageProfile.osDisk.osType),
type =~ 'microsoft.compute/virtualmachinescalesets', tostring(properties.virtualMachineProfile.storageProfile.osDisk.osType),
type =~ 'microsoft.containerservice/managedclusters', tostring(pool.osType),
type =~ 'microsoft.compute/disks', tostring(properties.osType),
'')
| extend size = case(
// Storage
type in~ ('microsoft.compute/disks','microsoft.compute/snapshots'), strcat(tostring(properties.diskSizeGB),' GB'),
type =~ 'microsoft.storage/storageaccounts', strcat(tostring(kind),' / ', tostring(properties.accessTier)),
type =~ 'microsoft.netapp/netappaccounts/capacitypools', strcat(tostring(properties.size/1073741824),' GiB'),
type =~ 'microsoft.elasticsan/elasticsans', strcat(tostring(properties.baseSizeTiB),'+',tostring(properties.extendedCapacitySizeTiB),' TiB'),
// Databases
type =~ 'microsoft.sql/managedinstances', strcat('vCores=', tostring(properties.vCores),' storGB=', tostring(properties.storageSizeInGB)),
type in~ ('microsoft.sql/servers/databases','microsoft.sql/servers/elasticpools') and skuTier in~ ('GeneralPurpose','BusinessCritical','Hyperscale'), strcat(skuCapacity,' vCores'),
type in~ ('microsoft.sql/servers/databases','microsoft.sql/servers/elasticpools'), strcat(skuCapacity,' DTU'),
type =~ 'microsoft.dbforpostgresql/flexibleservers', strcat('storGB=', tostring(properties.storage.storageSizeGB)),
type =~ 'microsoft.dbformysql/flexibleservers', strcat('storGB=', tostring(properties.storage.storageSizeGB)),
type =~ 'microsoft.cache/redis', strcat(tostring(properties.sku.family), tostring(properties.sku.capacity)),
type =~ 'microsoft.documentdb/databaseaccounts', tostring(properties.databaseAccountOfferType),
// Compute / Web
type =~ 'microsoft.compute/virtualmachinescalesets', strcat(skuCapacity,' instances'),
type =~ 'microsoft.web/serverfarms', strcat(skuName,' x',skuCapacity),
type =~ 'microsoft.azurefleet/fleets', strcat('target=', tostring(coalesce(toint(properties.spotPriorityProfile.capacity),0) + coalesce(toint(properties.regularPriorityProfile.capacity),0)),' VMs'),
// Containers
type =~ 'microsoft.app/containerapps', strcat(tostring(properties.template.containers[0].resources.cpu),' vCPU / ', tostring(properties.template.containers[0].resources.memory)),
type in~ ('microsoft.containerservice/managedclusters','microsoft.redhatopenshift/openshiftclusters'), strcat('nodes=', tostring(pool['count']),' (', tostring(sku.tier),')'),
// AI + Analytics
type =~ 'microsoft.search/searchservices', strcat(tostring(properties.partitionCount),'P x ', tostring(properties.replicaCount),'R'),
type =~ 'microsoft.kusto/clusters', strcat(skuName,' x',skuCapacity,' instances'),
type =~ 'microsoft.synapse/workspaces/sqlpools', skuName,
// Integration & Messaging (sku.capacity = units)
type =~ 'microsoft.servicebus/namespaces', iff(isnotempty(skuCapacity), strcat(skuName,' x',skuCapacity,' MU'), skuName),
type =~ 'microsoft.eventhub/namespaces', iff(isnotempty(skuCapacity), strcat(skuName,' x',skuCapacity,' TU/PU'), skuName),
type =~ 'microsoft.apimanagement/service', iff(isnotempty(skuCapacity), strcat(skuName,' x',skuCapacity,' units'), skuName),
type in~ ('microsoft.eventgrid/topics','microsoft.eventgrid/systemtopics','microsoft.eventgrid/domains'), 'pay-per-operation',
// IoT / Networking / Web comms
type =~ 'microsoft.devices/iothubs', strcat(skuName,' x',skuCapacity,' units'),
type =~ 'microsoft.network/expressroutecircuits', strcat(tostring(properties.serviceProviderProperties.bandwidthInMbps),' Mbps'),
type =~ 'microsoft.network/applicationgateways', tostring(coalesce(toint(properties.sku.capacity), toint(properties.autoscaleConfiguration.maxCapacity))),
type in~ ('microsoft.signalrservice/signalr','microsoft.signalrservice/webpubsub'), strcat(skuName,' x',skuCapacity,' units'),
// Provisioned config knobs (usage/consumption itself lives in Cost Management)
type =~ 'microsoft.cognitiveservices/accounts/deployments', strcat(tostring(properties.model.name),' ', tostring(properties.model.version),' (', skuName,' x', skuCapacity,')'),
type =~ 'microsoft.operationalinsights/workspaces', strcat('retention=', tostring(properties.retentionInDays),'d cap=', tostring(properties.workspaceCapping.dailyQuotaGb),'GB'),
type =~ 'microsoft.streamanalytics/streamingjobs', strcat(coalesce(tostring(properties.transformation.properties.streamingUnits), tostring(properties.sku.capacity)),' SU'),
type =~ 'microsoft.documentdb/cassandraclusters/datacenters', strcat(tostring(properties.sku),' x', tostring(properties.nodeCount),' nodes'),
type =~ 'microsoft.machinelearningservices/workspaces/computes', strcat(tostring(properties.properties.vmSize),' (', tostring(properties.properties.scaleSettings.maxNodeCount),' max nodes)'),
type =~ 'microsoft.batch/batchaccounts/pools', strcat(tostring(properties.vmSize),' x', tostring(properties.scaleSettings.fixedScale.targetDedicatedNodes),' dedicated'),
type =~ 'microsoft.datafactory/factories/integrationruntimes', strcat(tostring(properties.typeProperties.computeProperties.nodeSize),' x', tostring(properties.typeProperties.computeProperties.numberOfNodes)),
type =~ 'microsoft.eventhub/namespaces/eventhubs', strcat(tostring(properties.partitionCount),' partitions'),
type =~ 'microsoft.netapp/netappaccounts/capacitypools/volumes', strcat(tostring(properties.usageThreshold/1073741824),' GiB / ', tostring(properties.serviceLevel)),
type =~ 'microsoft.servicefabric/managedclusters/nodetypes', strcat(tostring(properties.vmSize),' x', tostring(properties.vmInstanceCount)),
type =~ 'microsoft.appplatform/spring/apps/deployments', strcat(tostring(properties.deploymentSettings.resourceRequests.cpu),' vCPU / ', tostring(properties.deploymentSettings.resourceRequests.memory),' x', tostring(sku.capacity)),
type =~ 'microsoft.synapse/workspaces/bigdatapools', strcat(tostring(properties.nodeSize),' x', tostring(properties.nodeCount),' nodes'),
type =~ 'microsoft.hdinsight/clusters', strcat(tostring(role.name),': ', tostring(role.hardwareProfile.vmSize),' x', tostring(role.targetInstanceCount)),
type in~ ('microsoft.documentdb/databaseaccounts/sqldatabases','microsoft.documentdb/databaseaccounts/sqldatabases/containers','microsoft.documentdb/databaseaccounts/mongodbdatabases','microsoft.documentdb/databaseaccounts/mongodbdatabases/collections','microsoft.documentdb/databaseaccounts/cassandrakeyspaces','microsoft.documentdb/databaseaccounts/cassandrakeyspaces/tables','microsoft.documentdb/databaseaccounts/gremlindatabases','microsoft.documentdb/databaseaccounts/gremlindatabases/graphs','microsoft.documentdb/databaseaccounts/tables'),
iff(isnotempty(tostring(properties.options.autoscaleSettings.maxThroughput)), strcat(tostring(properties.options.autoscaleSettings.maxThroughput),' RU/s (auto)'),
iff(isnotempty(tostring(properties.options.throughput)), strcat(tostring(properties.options.throughput),' RU/s'),
iff(isnotempty(tostring(properties.resource.autoscaleSettings.maxThroughput)),strcat(tostring(properties.resource.autoscaleSettings.maxThroughput),' RU/s (auto)'),
iff(isnotempty(tostring(properties.resource.throughput)), strcat(tostring(properties.resource.throughput),' RU/s'), 'shared / serverless')))),
// Generic fallback
isnotempty(skuCapacity), strcat('cap=', skuCapacity),
'')
// ================= OFFICIAL CATEGORY CLASSIFIER =================
| extend family = case(
type in~ ('microsoft.cognitiveservices/accounts','microsoft.cognitiveservices/accounts/projects','microsoft.search/searchservices','microsoft.machinelearningservices/workspaces','microsoft.machinelearningservices/workspaces/onlineendpoints','microsoft.machinelearningservices/registries','microsoft.bing/accounts','microsoft.videoindexer/accounts','microsoft.botservice/botservices'), 'AI + machine learning',
type in~ ('microsoft.synapse/workspaces','microsoft.synapse/workspaces/sqlpools','microsoft.synapse/workspaces/bigdatapools','microsoft.kusto/clusters','microsoft.streamanalytics/streamingjobs','microsoft.datafactory/factories','microsoft.hdinsight/clusters','microsoft.datalakestore/accounts','microsoft.datalakeanalytics/accounts','microsoft.fabric/capacities','microsoft.powerbidedicated/capacities','microsoft.analysisservices/servers','microsoft.purview/accounts','microsoft.databricks/workspaces','microsoft.eventhub/namespaces'), 'Analytics',
type in~ ('microsoft.compute/virtualmachines','microsoft.compute/virtualmachinescalesets','microsoft.batch/batchaccounts','microsoft.compute/hostgroups/hosts','microsoft.compute/cloudservices','microsoft.avs/privateclouds','microsoft.compute/virtualmachines/extensions','microsoft.compute/sshpublickeys','microsoft.compute/availabilitysets','microsoft.compute/images','microsoft.compute/galleries'), 'Compute',
type in~ ('microsoft.containerservice/managedclusters','microsoft.redhatopenshift/openshiftclusters','microsoft.app/containerapps','microsoft.app/managedenvironments','microsoft.app/sessionpools','microsoft.containerinstance/containergroups','microsoft.containerregistry/registries','microsoft.servicefabric/clusters','microsoft.servicefabric/managedclusters'), 'Containers',
type in~ ('microsoft.sql/servers','microsoft.sql/servers/databases','microsoft.sql/servers/elasticpools','microsoft.sql/managedinstances','microsoft.sqlvirtualmachine/sqlvirtualmachines','microsoft.dbforpostgresql/flexibleservers','microsoft.dbforpostgresql/servergroupsv2','microsoft.dbformysql/flexibleservers','microsoft.dbformariadb/servers','microsoft.documentdb/databaseaccounts','microsoft.documentdb/mongoclusters','microsoft.cache/redis','microsoft.cache/redisenterprise'), 'Databases',
type in~ ('microsoft.devcenter/devcenters','microsoft.devcenter/devcenters/devboxdefinitions','microsoft.devcenter/projects','microsoft.devcenter/projects/pools','microsoft.devcenter/networkconnections','microsoft.devopsinfrastructure/pools','microsoft.loadtestservice/loadtests','microsoft.dashboard/grafana','microsoft.labservices/labs','microsoft.devtestlab/schedules'), 'Developer tools',
type in~ ('microsoft.kubernetesconfiguration/privatelinkscopes','microsoft.kubernetesconfiguration/extensions'), 'Hybrid + multicloud',
type in~ ('microsoft.managedidentity/userassignedidentities'), 'Identity',
type in~ ('microsoft.apimanagement/service','microsoft.eventgrid/topics','microsoft.eventgrid/systemtopics','microsoft.eventgrid/domains','microsoft.eventgrid/namespaces','microsoft.logic/workflows','microsoft.servicebus/namespaces','microsoft.relay/namespaces','microsoft.notificationhubs/namespaces','microsoft.appconfiguration/configurationstores','microsoft.web/connections'), 'Integration',
type in~ ('microsoft.devices/iothubs','microsoft.devices/provisioningservices','microsoft.iotcentral/iotapps','microsoft.digitaltwins/digitaltwinsinstances','microsoft.timeseriesinsights/environments'), 'Internet of Things',
type in~ ('microsoft.operationalinsights/workspaces','microsoft.operationsmanagement/solutions','microsoft.insights/components','microsoft.insights/webtests','microsoft.insights/metricalerts','microsoft.insights/scheduledqueryrules','microsoft.insights/actiongroups','microsoft.insights/autoscalesettings','microsoft.insights/datacollectionrules','microsoft.insights/datacollectionendpoints','microsoft.alertsmanagement/smartdetectoralertrules','microsoft.automation/automationaccounts','microsoft.automation/automationaccounts/runbooks','microsoft.recoveryservices/vaults','microsoft.dataprotection/backupvaults','microsoft.monitor/accounts','microsoft.chaos/experiments'), 'Management and governance',
type in~ ('microsoft.media/mediaservices'), 'Media',
type in~ ('microsoft.network/publicipaddresses','microsoft.network/publicipprefixes','microsoft.network/loadbalancers','microsoft.network/applicationgateways','microsoft.network/azurefirewalls','microsoft.network/frontdoorwebapplicationfirewallpolicies','microsoft.network/applicationgatewaywebapplicationfirewallpolicies','microsoft.network/bastionhosts','microsoft.network/natgateways','microsoft.network/virtualnetworkgateways','microsoft.network/expressroutecircuits','microsoft.network/expressrouteports','microsoft.network/virtualhubs','microsoft.network/vpngateways','microsoft.network/p2svpngateways','microsoft.network/frontdoors','microsoft.cdn/profiles','microsoft.network/ddosprotectionplans','microsoft.network/trafficmanagerprofiles','microsoft.network/dnszones','microsoft.network/privatednszones','microsoft.network/dnsresolvers','microsoft.network/privateendpoints','microsoft.network/privatelinkservices','microsoft.network/networkvirtualappliances','microsoft.servicenetworking/trafficcontrollers','microsoft.network/virtualnetworks','microsoft.network/networkinterfaces','microsoft.network/networksecuritygroups','microsoft.network/routetables','microsoft.network/privatednszones/virtualnetworklinks','microsoft.network/networkwatchers','microsoft.network/networksecurityperimeters','microsoft.network/ipgroups','github.network/networksettings'), 'Networking',
type in~ ('microsoft.keyvault/vaults','microsoft.keyvault/managedhsms','microsoft.security/securityconnectors'), 'Security',
type in~ ('microsoft.compute/disks','microsoft.compute/snapshots','microsoft.storage/storageaccounts','microsoft.netapp/netappaccounts/capacitypools','microsoft.elasticsan/elasticsans','microsoft.storagesync/storagesyncservices','microsoft.storagecache/caches','microsoft.storagecache/amlfilesystems'), 'Storage',
type in~ ('microsoft.desktopvirtualization/hostpools'), 'Virtual desktop infrastructure',
type in~ ('microsoft.web/serverfarms','microsoft.web/sites','microsoft.web/staticsites','microsoft.web/hostingenvironments','microsoft.appplatform/spring','microsoft.signalrservice/signalr','microsoft.signalrservice/webpubsub','microsoft.communication/communicationservices','microsoft.communication/emailservices'), 'Web',
type =~ 'microsoft.healthbot/healthbots', 'AI + machine learning',
type in~ ('microsoft.datashare/accounts','microsoft.datacatalog/catalogs'), 'Analytics',
type in~ ('microsoft.azurefleet/fleets','microsoft.quantum/workspaces','microsoft.virtualmachineimages/imagetemplates'), 'Compute',
type in~ ('microsoft.containerservice/fleets','microsoft.containerstorage/pools'), 'Containers',
type in~ ('microsoft.datamigration/sqlmigrationservices','microsoft.datamigration/services','microsoft.documentdb/cassandraclusters','microsoft.confidentialledger/ledgers'), 'Databases',
type in~ ('microsoft.devtestlab/labs','microsoft.azureplaywrightservice/accounts','microsoft.codesigning/codesigningaccounts'), 'Developer tools',
type in~ ('microsoft.azurestackhci/clusters','microsoft.databoxedge/databoxedgedevices','microsoft.storagemover/storagemovers'), 'Hybrid + multicloud',
type =~ 'microsoft.aad/domainservices', 'Identity',
type =~ 'microsoft.healthcareapis/workspaces', 'Integration',
type =~ 'microsoft.maps/accounts', 'Internet of Things',
type =~ 'microsoft.cognitiveservices/accounts/deployments', 'AI + machine learning',
type =~ 'microsoft.documentdb/cassandraclusters/datacenters', 'Databases',
type =~ 'microsoft.machinelearningservices/workspaces/computes', 'AI + machine learning',
type =~ 'microsoft.batch/batchaccounts/pools', 'Compute',
type in~ ('microsoft.datafactory/factories/integrationruntimes','microsoft.eventhub/namespaces/eventhubs'), 'Analytics',
type =~ 'microsoft.netapp/netappaccounts/capacitypools/volumes', 'Storage',
type in~ ('microsoft.containerregistry/registries/replications','microsoft.servicefabric/managedclusters/nodetypes'), 'Containers',
type =~ 'microsoft.appplatform/spring/apps/deployments', 'Web',
type in~ ('microsoft.documentdb/databaseaccounts/sqldatabases','microsoft.documentdb/databaseaccounts/sqldatabases/containers','microsoft.documentdb/databaseaccounts/mongodbdatabases','microsoft.documentdb/databaseaccounts/mongodbdatabases/collections','microsoft.documentdb/databaseaccounts/cassandrakeyspaces','microsoft.documentdb/databaseaccounts/cassandrakeyspaces/tables','microsoft.documentdb/databaseaccounts/gremlindatabases','microsoft.documentdb/databaseaccounts/gremlindatabases/graphs','microsoft.documentdb/databaseaccounts/tables'), 'Databases',
'Other / Uncategorized')
// ================= OFFICIAL SERVICE NAME =================
| extend serviceName = case(
type =~ 'microsoft.compute/virtualmachines', 'Virtual Machines',
type =~ 'microsoft.compute/virtualmachinescalesets', 'Virtual Machine Scale Sets',
type =~ 'microsoft.containerservice/managedclusters', 'Azure Kubernetes Service (AKS)',
type =~ 'microsoft.redhatopenshift/openshiftclusters', 'Azure Red Hat OpenShift',
type =~ 'microsoft.batch/batchaccounts', 'Batch',
type =~ 'microsoft.compute/hostgroups/hosts', 'Azure Dedicated Host',
type =~ 'microsoft.compute/cloudservices', 'Cloud Services',
type =~ 'microsoft.avs/privateclouds', 'Azure VMware Solution',
type =~ 'microsoft.servicefabric/clusters', 'Service Fabric Cluster',
type =~ 'microsoft.servicefabric/managedclusters', 'Service Fabric Managed Cluster',
type =~ 'microsoft.desktopvirtualization/hostpools', 'Azure Virtual Desktop',
type =~ 'microsoft.labservices/labs', 'Azure Lab Services',
type =~ 'microsoft.compute/disks', 'Managed Disks',
type =~ 'microsoft.compute/snapshots', 'Disk Snapshot',
type =~ 'microsoft.compute/galleries', 'Azure Compute Gallery',
type =~ 'microsoft.compute/images', 'VM Image',
type =~ 'microsoft.compute/availabilitysets', 'Availability Set',
type =~ 'microsoft.compute/virtualmachines/extensions', 'VM Extension',
type =~ 'microsoft.compute/sshpublickeys', 'SSH Public Key',
type =~ 'microsoft.storage/storageaccounts', 'Storage Account',
type =~ 'microsoft.netapp/netappaccounts/capacitypools','Azure NetApp Files',
type =~ 'microsoft.elasticsan/elasticsans', 'Azure Elastic SAN',
type =~ 'microsoft.storagesync/storagesyncservices', 'Azure File Sync',
type =~ 'microsoft.storagecache/caches', 'Azure HPC Cache',
type =~ 'microsoft.storagecache/amlfilesystems', 'Azure Managed Lustre',
type =~ 'microsoft.sql/servers', 'Azure SQL (logical server)',
type =~ 'microsoft.sql/servers/databases', 'Azure SQL Database',
type =~ 'microsoft.sql/servers/elasticpools', 'Azure SQL Elastic Pool',
type =~ 'microsoft.sql/managedinstances', 'Azure SQL Managed Instance',
type =~ 'microsoft.sqlvirtualmachine/sqlvirtualmachines','SQL Server on Azure Virtual Machines',
type =~ 'microsoft.dbforpostgresql/flexibleservers', 'Azure Database for PostgreSQL',
type =~ 'microsoft.dbforpostgresql/servergroupsv2', 'Azure Cosmos DB for PostgreSQL',
type =~ 'microsoft.dbformysql/flexibleservers', 'Azure Database for MySQL',
type =~ 'microsoft.dbformariadb/servers', 'Azure Database for MariaDB',
type =~ 'microsoft.documentdb/databaseaccounts', 'Azure Cosmos DB',
type =~ 'microsoft.documentdb/mongoclusters', 'Azure Cosmos DB for MongoDB (vCore)',
type =~ 'microsoft.cache/redis', 'Azure Cache for Redis',
type =~ 'microsoft.cache/redisenterprise', 'Azure Managed Redis',
type =~ 'microsoft.web/serverfarms', 'App Service Plan',
type =~ 'microsoft.web/sites', 'App Service / Azure Functions',
type =~ 'microsoft.web/staticsites', 'Static Web Apps',
type =~ 'microsoft.web/hostingenvironments', 'App Service Environment',
type =~ 'microsoft.appplatform/spring', 'Azure Spring Apps',
type =~ 'microsoft.signalrservice/signalr', 'Azure SignalR Service',
type =~ 'microsoft.signalrservice/webpubsub', 'Azure Web PubSub',
type =~ 'microsoft.communication/communicationservices','Azure Communication Services',
type =~ 'microsoft.communication/emailservices', 'Email Communication Service',
type =~ 'microsoft.app/containerapps', 'Azure Container Apps',
type =~ 'microsoft.app/managedenvironments', 'Container Apps Environment',
type =~ 'microsoft.app/sessionpools', 'Container Apps Session Pool',
type =~ 'microsoft.containerregistry/registries', 'Azure Container Registry',
type =~ 'microsoft.containerinstance/containergroups', 'Azure Container Instances',
// AI + Machine Learning (kind-aware)
type =~ 'microsoft.cognitiveservices/accounts' and kind =~ 'AIServices', 'Foundry Account',
type =~ 'microsoft.cognitiveservices/accounts' and kind =~ 'OpenAI', 'Azure OpenAI',
type =~ 'microsoft.cognitiveservices/accounts/projects', 'Foundry Project',
type =~ 'microsoft.cognitiveservices/accounts' and kind =~ 'FormRecognizer', 'Azure AI Document Intelligence',
type =~ 'microsoft.cognitiveservices/accounts' and kind =~ 'ComputerVision', 'Azure AI Vision',
type =~ 'microsoft.cognitiveservices/accounts' and kind =~ 'CustomVision.Training', 'Azure AI Custom Vision (Training)',
type =~ 'microsoft.cognitiveservices/accounts' and kind =~ 'CustomVision.Prediction', 'Azure AI Custom Vision (Prediction)',
type =~ 'microsoft.cognitiveservices/accounts' and kind =~ 'SpeechServices', 'Azure AI Speech',
type =~ 'microsoft.cognitiveservices/accounts' and kind in~ ('TextAnalytics','Language'), 'Azure AI Language',
type =~ 'microsoft.cognitiveservices/accounts' and kind =~ 'TextTranslation', 'Azure AI Translator',
type =~ 'microsoft.cognitiveservices/accounts' and kind =~ 'Face', 'Azure AI Face',
type =~ 'microsoft.cognitiveservices/accounts' and kind =~ 'ContentSafety', 'Azure AI Content Safety',
type =~ 'microsoft.cognitiveservices/accounts' and kind =~ 'CognitiveServices', 'Azure AI services (multi-service)',
type =~ 'microsoft.cognitiveservices/accounts', strcat('Azure AI - ', tostring(kind)),
type =~ 'microsoft.machinelearningservices/workspaces' and kind =~ 'Hub', 'Foundry Hub (hub-based)',
type =~ 'microsoft.machinelearningservices/workspaces' and kind =~ 'Project', 'Foundry Project (hub-based)',
type =~ 'microsoft.machinelearningservices/workspaces', 'Azure Machine Learning',
type =~ 'microsoft.machinelearningservices/workspaces/onlineendpoints', 'ML Online Endpoint',
type =~ 'microsoft.machinelearningservices/registries', 'ML Registry',
type =~ 'microsoft.search/searchservices', 'Azure AI Search',
type =~ 'microsoft.bing/accounts', 'Grounding with Bing Search',
type =~ 'microsoft.videoindexer/accounts', 'Azure AI Video Indexer',
type =~ 'microsoft.botservice/botservices', 'Azure AI Bot Service',
// Analytics
type =~ 'microsoft.databricks/workspaces', 'Azure Databricks',
type =~ 'microsoft.eventhub/namespaces', 'Event Hubs',
type =~ 'microsoft.synapse/workspaces', 'Azure Synapse Analytics',
type =~ 'microsoft.synapse/workspaces/sqlpools', 'Synapse SQL Pool',
type =~ 'microsoft.synapse/workspaces/bigdatapools', 'Synapse Spark Pool',
type =~ 'microsoft.kusto/clusters', 'Azure Data Explorer',
type =~ 'microsoft.streamanalytics/streamingjobs', 'Azure Stream Analytics',
type =~ 'microsoft.datafactory/factories', 'Azure Data Factory',
type =~ 'microsoft.hdinsight/clusters', 'HDInsight',
type =~ 'microsoft.datalakestore/accounts', 'Azure Data Lake Storage Gen1',
type =~ 'microsoft.datalakeanalytics/accounts', 'Data Lake Analytics',
type =~ 'microsoft.fabric/capacities', 'Microsoft Fabric',
type =~ 'microsoft.powerbidedicated/capacities', 'Power BI Embedded',
type =~ 'microsoft.analysisservices/servers', 'Azure Analysis Services',
type =~ 'microsoft.purview/accounts', 'Microsoft Purview',
// Integration
type =~ 'microsoft.servicebus/namespaces', 'Service Bus',
type =~ 'microsoft.eventgrid/topics', 'Event Grid Topic',
type =~ 'microsoft.eventgrid/systemtopics', 'Event Grid System Topic',
type =~ 'microsoft.eventgrid/domains', 'Event Grid Domain',
type =~ 'microsoft.eventgrid/namespaces', 'Event Grid Namespace',
type =~ 'microsoft.apimanagement/service', 'API Management',
type =~ 'microsoft.logic/workflows', 'Logic Apps',
type =~ 'microsoft.relay/namespaces', 'Azure Relay',
type =~ 'microsoft.notificationhubs/namespaces', 'Notification Hubs',
type =~ 'microsoft.appconfiguration/configurationstores','App Configuration',
type =~ 'microsoft.web/connections', 'API Connection',
// Internet of Things
type =~ 'microsoft.devices/iothubs', 'Azure IoT Hub',
type =~ 'microsoft.devices/provisioningservices', 'IoT Hub Device Provisioning Service',
type =~ 'microsoft.iotcentral/iotapps', 'Azure IoT Central',
type =~ 'microsoft.digitaltwins/digitaltwinsinstances', 'Azure Digital Twins',
type =~ 'microsoft.timeseriesinsights/environments', 'Time Series Insights',
// Networking
type =~ 'microsoft.network/publicipaddresses', 'Public IP Address',
type =~ 'microsoft.network/publicipprefixes', 'Public IP Prefix',
type =~ 'microsoft.network/loadbalancers', 'Load Balancer',
type =~ 'microsoft.network/applicationgateways', 'Application Gateway',
type =~ 'microsoft.network/azurefirewalls', 'Azure Firewall',
type =~ 'microsoft.network/frontdoorwebapplicationfirewallpolicies', 'Front Door WAF Policy',
type =~ 'microsoft.network/applicationgatewaywebapplicationfirewallpolicies','Application Gateway WAF Policy',
type =~ 'microsoft.network/bastionhosts', 'Azure Bastion',
type =~ 'microsoft.network/natgateways', 'NAT Gateway',
type =~ 'microsoft.network/virtualnetworkgateways', 'VPN / ExpressRoute Gateway',
type =~ 'microsoft.network/expressroutecircuits', 'Azure ExpressRoute',
type =~ 'microsoft.network/expressrouteports', 'ExpressRoute Direct Port',
type =~ 'microsoft.network/virtualhubs', 'Virtual WAN Hub',
type =~ 'microsoft.network/vpngateways', 'VPN Gateway (vWAN)',
type =~ 'microsoft.network/p2svpngateways', 'Point-to-Site VPN Gateway',
type =~ 'microsoft.network/frontdoors', 'Azure Front Door (classic)',
type =~ 'microsoft.cdn/profiles', 'Azure Front Door / CDN',
type =~ 'microsoft.network/ddosprotectionplans', 'Azure DDoS Protection',
type =~ 'microsoft.network/trafficmanagerprofiles', 'Traffic Manager',
type =~ 'microsoft.network/dnszones', 'Azure DNS Zone',
type =~ 'microsoft.network/privatednszones', 'Private DNS Zone',
type =~ 'microsoft.network/dnsresolvers', 'DNS Private Resolver',
type =~ 'microsoft.network/privateendpoints', 'Private Endpoint',
type =~ 'microsoft.network/privatelinkservices', 'Private Link Service',
type =~ 'microsoft.network/networkvirtualappliances', 'Network Virtual Appliance',
type =~ 'microsoft.servicenetworking/trafficcontrollers','Application Gateway for Containers',
type =~ 'microsoft.network/virtualnetworks', 'Virtual Network',
type =~ 'microsoft.network/networkinterfaces', 'Network Interface',
type =~ 'microsoft.network/networksecuritygroups', 'Network Security Group',
type =~ 'microsoft.network/routetables', 'Route Table',
type =~ 'microsoft.network/privatednszones/virtualnetworklinks', 'Private DNS Zone VNet Link',
type =~ 'microsoft.network/networkwatchers', 'Network Watcher',
type =~ 'microsoft.network/networksecurityperimeters', 'Network Security Perimeter',
type =~ 'microsoft.network/ipgroups', 'IP Group',
type =~ 'github.network/networksettings', 'GitHub Network Settings',
// Security
type =~ 'microsoft.keyvault/vaults', 'Azure Key Vault',
type =~ 'microsoft.keyvault/managedhsms', 'Azure Key Vault Managed HSM',
type =~ 'microsoft.security/securityconnectors', 'Microsoft Defender for Cloud',
// Identity
type =~ 'microsoft.managedidentity/userassignedidentities', 'Managed Identity',
// Hybrid + multicloud
type =~ 'microsoft.kubernetesconfiguration/privatelinkscopes', 'Azure Arc Private Link Scope',
type =~ 'microsoft.kubernetesconfiguration/extensions', 'Azure Arc Cluster Extension',
// Management and governance
type =~ 'microsoft.operationalinsights/workspaces', 'Log Analytics Workspace',
type =~ 'microsoft.operationsmanagement/solutions', 'Log Analytics Solution',
type =~ 'microsoft.insights/components', 'Application Insights',
type =~ 'microsoft.insights/webtests', 'Availability Test',
type =~ 'microsoft.insights/metricalerts', 'Metric Alert Rule',
type =~ 'microsoft.insights/scheduledqueryrules', 'Log Search Alert Rule',
type =~ 'microsoft.insights/actiongroups', 'Action Group',
type =~ 'microsoft.insights/autoscalesettings', 'Autoscale Setting',
type =~ 'microsoft.insights/datacollectionrules', 'Data Collection Rule',
type =~ 'microsoft.insights/datacollectionendpoints', 'Data Collection Endpoint',
type =~ 'microsoft.alertsmanagement/smartdetectoralertrules', 'Smart Detection Alert Rule',
type =~ 'microsoft.automation/automationaccounts', 'Azure Automation',
type =~ 'microsoft.automation/automationaccounts/runbooks', 'Automation Runbook',
type =~ 'microsoft.recoveryservices/vaults', 'Azure Backup / Site Recovery',
type =~ 'microsoft.dataprotection/backupvaults', 'Backup Vault',
type =~ 'microsoft.monitor/accounts', 'Azure Monitor Workspace',
type =~ 'microsoft.chaos/experiments', 'Azure Chaos Studio',
// Developer tools
type =~ 'microsoft.devcenter/devcenters', 'Microsoft Dev Box (Dev Center)',
type =~ 'microsoft.devcenter/devcenters/devboxdefinitions', 'Dev Box Definition',
type =~ 'microsoft.devcenter/projects', 'Dev Center Project',
type =~ 'microsoft.devcenter/projects/pools', 'Dev Box Pool',
type =~ 'microsoft.devcenter/networkconnections', 'Dev Center Network Connection',
type =~ 'microsoft.devopsinfrastructure/pools', 'Managed DevOps Pools',
type =~ 'microsoft.loadtestservice/loadtests', 'Azure Load Testing',
type =~ 'microsoft.dashboard/grafana', 'Azure Managed Grafana',
type =~ 'microsoft.devtestlab/schedules', 'DevTest Labs Schedule',
// Media
type =~ 'microsoft.media/mediaservices', 'Azure Media Services',
type =~ 'microsoft.healthbot/healthbots', 'Azure Health Bot',
type =~ 'microsoft.datashare/accounts', 'Azure Data Share',
type =~ 'microsoft.datacatalog/catalogs', 'Azure Data Catalog',
type =~ 'microsoft.azurefleet/fleets', 'Azure Compute Fleet',
type =~ 'microsoft.quantum/workspaces', 'Azure Quantum',
type =~ 'microsoft.virtualmachineimages/imagetemplates', 'Azure VM Image Builder',
type =~ 'microsoft.containerservice/fleets', 'Azure Kubernetes Fleet Manager',
type =~ 'microsoft.containerstorage/pools', 'Azure Container Storage',
type =~ 'microsoft.datamigration/sqlmigrationservices', 'Azure Database Migration Service',
type =~ 'microsoft.datamigration/services', 'Azure Database Migration Service',
type =~ 'microsoft.documentdb/cassandraclusters', 'Azure Managed Instance for Apache Cassandra',
type =~ 'microsoft.confidentialledger/ledgers', 'Azure confidential ledger',
type =~ 'microsoft.devtestlab/labs', 'Azure DevTest Labs',
type =~ 'microsoft.azureplaywrightservice/accounts', 'Microsoft Playwright Testing',
type =~ 'microsoft.codesigning/codesigningaccounts', 'Trusted Signing',
type =~ 'microsoft.azurestackhci/clusters', 'Azure Local (Azure Stack HCI)',
type =~ 'microsoft.databoxedge/databoxedgedevices', 'Azure Stack Edge',
type =~ 'microsoft.storagemover/storagemovers', 'Azure Storage Mover',
type =~ 'microsoft.aad/domainservices', 'Microsoft Entra Domain Services',
type =~ 'microsoft.healthcareapis/workspaces', 'Azure Health Data Services',
type =~ 'microsoft.maps/accounts', 'Azure Maps',
type =~ 'microsoft.cognitiveservices/accounts/deployments', 'Foundry / OpenAI Model Deployment',
type =~ 'microsoft.documentdb/cassandraclusters/datacenters', 'Managed Cassandra Data Center',
type =~ 'microsoft.machinelearningservices/workspaces/computes', 'Azure ML Compute',
type =~ 'microsoft.batch/batchaccounts/pools', 'Batch Pool',
type =~ 'microsoft.datafactory/factories/integrationruntimes', 'Integration Runtime',
type =~ 'microsoft.eventhub/namespaces/eventhubs', 'Event Hub',
type =~ 'microsoft.netapp/netappaccounts/capacitypools/volumes', 'Azure NetApp Files Volume',
type =~ 'microsoft.containerregistry/registries/replications', 'Container Registry Replication',
type =~ 'microsoft.servicefabric/managedclusters/nodetypes', 'Service Fabric Node Type',
type =~ 'microsoft.appplatform/spring/apps/deployments', 'Spring Apps Deployment',
type =~ 'microsoft.documentdb/databaseaccounts/sqldatabases', 'Cosmos DB SQL Database',
type =~ 'microsoft.documentdb/databaseaccounts/sqldatabases/containers', 'Cosmos DB Container',
type =~ 'microsoft.documentdb/databaseaccounts/mongodbdatabases', 'Cosmos DB Mongo Database',
type =~ 'microsoft.documentdb/databaseaccounts/mongodbdatabases/collections', 'Cosmos DB Mongo Collection',
type =~ 'microsoft.documentdb/databaseaccounts/cassandrakeyspaces', 'Cosmos DB Cassandra Keyspace',
type =~ 'microsoft.documentdb/databaseaccounts/cassandrakeyspaces/tables','Cosmos DB Cassandra Table',
type =~ 'microsoft.documentdb/databaseaccounts/gremlindatabases', 'Cosmos DB Gremlin Database',
type =~ 'microsoft.documentdb/databaseaccounts/gremlindatabases/graphs', 'Cosmos DB Gremlin Graph',
type =~ 'microsoft.documentdb/databaseaccounts/tables', 'Cosmos DB Table',
// Fallback: resource-type leaf
extract('([^/]+)$', 1, type)
)
// Cost-attribution note: AKS/ARO node compute is billed on the VMSS in the node RG, NOT on the cluster resource
| extend costNote = case(
type in~ ('microsoft.containerservice/managedclusters','microsoft.redhatopenshift/openshiftclusters'), 'NOT billed here (informational) — node compute = the VMSS in node RG; AKS charge = control-plane tier only',
type =~ 'microsoft.compute/virtualmachinescalesets' and resourceGroup startswith 'mc_', 'AKS node pool VMSS — THIS is the billed node compute',
'')
| project family, serviceName, name, type, kind, location, resourceGroup,
tier, skuName, computeSize, nodePool, osType, size, costNote, skuFamily, skuCapacity, subscriptionId
| order by family asc, serviceName asc, name asc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment