如何使用Azure Python SDK查询指定虚拟机所属的SKU家族
实现方案
核心逻辑
你需要先拉取指定虚拟机的硬件配置拿到对应的SKU名称,再匹配SKU详情判断所属系列,不用全量导出后再筛选,可以直接针对目标SKU做匹配,效率更高。
- 普通独立虚拟机通过
compute_client.virtual_machines.get()接口拉取配置 - 虚拟机规模集实例通过
compute_client.virtual_machine_scale_set_vms.get()接口拉取配置 - VM系列可以直接通过SKU名称前缀判断,N系列所有SKU均以
Standard_N开头,无需额外匹配SKU属性即可快速识别
完整可运行代码
import json from azure.mgmt.compute import ComputeManagementClient from azure.common.credentials import ServicePrincipalCredentials # 服务主体认证配置 client_id = "sp appId" secret = "sp password" tenant = "sp tenant" credentials = ServicePrincipalCredentials( client_id = client_id, secret = secret, tenant = tenant ) Subscription_Id = '你的订阅ID' compute_client = ComputeManagementClient(credentials, Subscription_Id) # 配置要查询的目标虚拟机信息 resource_group_name = '你的资源组名称' vm_name = '目标虚拟机名称' # 1. 查询目标虚拟机的SKU信息 vm = compute_client.virtual_machines.get(resource_group_name, vm_name) target_vm_size = vm.hardware_profile.vm_size print(f"目标虚拟机使用的SKU为:{target_vm_size}") # 2. 判断所属系列 # 快速判断是否为N系列 if target_vm_size.startswith('Standard_N'): vm_family = 'N系列' else: # 提取SKU前缀获取家族,比如Standard_D2s_v3前缀为Standard_D,属于D系列 sku_prefix = target_vm_size.split('_')[1][0] if '_' in target_vm_size else '未知' vm_family = f"{sku_prefix}系列" print(f"目标虚拟机所属系列:{vm_family}") # 3. 如果需要获取该SKU的全量详情,可以从全量SKU列表匹配 all_skus = [sku.as_dict() for sku in compute_client.resource_skus.list(raw=True)] target_sku_detail = next((sku for sku in all_skus if sku['name'] == target_vm_size and sku['resource_type'] == 'virtualMachines'), None) if target_sku_detail: print("目标SKU全量详情:") print(json.dumps(target_sku_detail, indent=2, ensure_ascii=False))
特殊场景说明
如果你要查询的是虚拟机规模集内的实例,将第一步查询虚拟机的代码替换为如下内容即可:
vmss_name = '你的虚拟机规模集名称' vmss_instance_id = '实例ID' vmss_vm = compute_client.virtual_machine_scale_set_vms.get(resource_group_name, vmss_name, vmss_instance_id) target_vm_size = vmss_vm.hardware_profile.vm_size
内容的提问来源于stack exchange,提问作者svw1105
相关产品推荐
相关产品推荐

