You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Azure Python API检测虚拟机是否关联公网IP?

Azure虚拟机公网IP检测的Python实现方案

是否存在对应az vm list-ip-addresses的Python API?

存在对应的实现逻辑,虽然没有完全一一映射的单接口,但通过最新版Azure Python SDK(azure-mgmt-compute + azure-mgmt-network)可以实现相同功能,且比直接调用CLI更适合集成到Python应用中。

检测虚拟机是否关联公网IP的最优方法

使用官方Python SDK是最优方案,具体实现步骤如下:

  1. 安装依赖包:
pip install azure-mgmt-compute azure-mgmt-network azure-identity
  1. 代码实现(包含布尔值返回和公网IP打印):
from azure.identity import DefaultAzureCredential
from azure.mgmt.compute import ComputeManagementClient
from azure.mgmt.network import NetworkManagementClient

def has_public_ip(vm_name, resource_group_name, subscription_id):
    # 初始化认证与客户端
    credential = DefaultAzureCredential()
    compute_client = ComputeManagementClient(credential, subscription_id)
    network_client = NetworkManagementClient(credential, subscription_id)

    # 获取虚拟机关联的网络接口ID列表
    vm = compute_client.virtual_machines.get(resource_group_name, vm_name)
    nic_ids = [nic.id for nic in vm.network_profile.network_interfaces]

    has_public = False
    public_ips = []

    # 遍历网络接口,检查公网IP配置
    for nic_id in nic_ids:
        nic_name = nic_id.split('/')[-1]
        nic_rg = nic_id.split('/')[4]
        nic = network_client.network_interfaces.get(nic_rg, nic_name)
        
        for ip_config in nic.ip_configurations:
            if ip_config.public_ip_address:
                has_public = True
                # 提取公网IP地址详情
                pip_id = ip_config.public_ip_address.id
                pip_name = pip_id.split('/')[-1]
                pip_rg = pip_id.split('/')[4]
                pip = network_client.public_ip_addresses.get(pip_rg, pip_name)
                public_ips.append(pip.ip_address)
    
    # 打印公网IP(可选)
    if public_ips:
        print(f"虚拟机{vm_name}关联的公网IP:{', '.join(public_ips)}")
    else:
        print(f"虚拟机{vm_name}未关联公网IP")
    
    return has_public

# 调用示例
if __name__ == "__main__":
    SUBSCRIPTION_ID = "你的订阅ID"
    RESOURCE_GROUP = "你的资源组名"
    VM_NAME = "testVM"
    
    result = has_public_ip(VM_NAME, RESOURCE_GROUP, SUBSCRIPTION_ID)
    print(f"是否关联公网IP:{result}")

补充说明

  • 该方案基于Azure最新SDK版本,使用DefaultAzureCredential支持本地开发、Azure托管环境等多种认证场景
  • 若必须依赖Azure CLI,也可通过subprocess模块调用az vm list-ip-addresses命令并解析输出,但这种方式依赖CLI环境配置,稳定性与可维护性不如SDK

内容的提问来源于stack exchange,提问作者abhinav singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 13:50:20