使用Python SDK for Azure如何获取虚拟机创建日期与时间?
解决方案
你当前用计算客户端拉取VM列表的接口,返回的是计算服务维度的VM配置信息,默认不包含资源创建时间字段——这个字段属于Azure资源管理器存储的通用资源元数据,不在计算服务的专属返回结构里,所以直接打印VM对象找不到对应属性。
实现路径
- 初始化
ResourceManagementClient,复用你之前给计算客户端传的凭证、订阅ID即可,不需要额外配置权限(只要你的凭证有VM资源读权限,就能读取对应元数据) - 根据你的VM规模选对应实现方式:
- 批量查询(VM数量多的场景优先选,性能更好):先通过资源客户端按资源类型过滤,一次性拉取所有VM的元数据拿到创建时间,再和已有的VM配置数据关联
- 单VM查询(VM数量少的场景选,代码改动最小):遍历VM列表时,根据每个VM的资源ID单独拉取元数据读取创建时间
可直接复用的代码示例
from azure.mgmt.compute import ComputeManagementClient from azure.mgmt.resource import ResourceManagementClient # 复用你已有的凭证、订阅ID参数 compute_client = ComputeManagementClient(credential, Subscription_Id) resource_client = ResourceManagementClient(credential, Subscription_Id) # ---------- 可选1:批量查询,性能更优 ---------- # 先拉取所有VM类型的资源元数据,构建ID-创建时间的映射表 vm_resource_list = resource_client.resources.list( filter="resourceType eq 'Microsoft.Compute/virtualMachines'" ) vm_create_time_map = { res.id: res.created_time for res in vm_resource_list } # 拉取VM详情时直接从映射表取创建时间 vm_list = compute_client.virtual_machines.list_all() for vm in vm_list: vm_create_time = vm_create_time_map.get(vm.id) print(f"VM名称: {vm.name}, 创建时间(UTC): {vm_create_time}") # 此处保留你原有的VM详情处理逻辑 # ---------- 可选2:单VM查询,代码改动最小 ---------- # vm_list = compute_client.virtual_machines.list_all() # for vm in vm_list: # # 通过VM资源ID查询对应元数据 # vm_resource = resource_client.resources.get_by_id(vm.id, api_version="2023-07-01") # print(f"VM名称: {vm.name}, 创建时间(UTC): {vm_resource.created_time}")
注意事项
- 返回的
created_time是UTC时区的datetime对象,需要展示本地时间的话自行做时区转换即可 - 不要通过活动日志查询VM创建时间:活动日志有固定保留期限,超期的创建记录会被清理,返回结果不准确
- 这个逻辑对所有Azure资源通用,后续要查磁盘、公共IP、存储账户等其他资源的创建时间,替换对应资源类型过滤条件即可
内容的提问来源于stack exchange,提问作者Aditya Malviya
相关产品推荐
相关产品推荐

