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

如何使用Python在GCP特定区域列出所有计算实例?

按区域筛选GCP Compute Engine实例的Python实现

GCP的区域包含多个可用区,要按区域筛选实例,核心思路是:先获取目标区域下的所有可用区,再逐个拉取每个可用区的实例列表,最后合并结果。以下提供两种实现方式:

方法一:使用Google Cloud官方客户端库(推荐)

官方客户端库封装了认证、API调用等细节,更简洁可靠。

步骤:

  1. 安装依赖库:
pip install google-cloud-compute
  1. 完成身份认证:
    • 本地开发可执行 gcloud auth application-default login
    • 生产环境建议使用服务账号密钥,设置环境变量 GOOGLE_APPLICATION_CREDENTIALS 指向密钥文件路径

代码实现:

from google.cloud import compute_v1

def list_instances_by_region(project_id: str, region: str) -> list:
    # 初始化Compute Engine客户端
    compute_client = compute_v1.InstancesClient()
    zone_client = compute_v1.ZonesClient()
    
    # 筛选目标区域下的所有可用区
    zones = zone_client.list(project=project_id, filter=f"region:*{region}")
    
    instances = []
    # 遍历可用区,拉取实例数据
    for zone in zones:
        zone_name = zone.name
        try:
            zone_instances = compute_client.list(project=project_id, zone=zone_name)
            instances.extend(zone_instances)
        except Exception as e:
            print(f"获取可用区 {zone_name} 实例失败: {str(e)}")
    
    return instances

# 使用示例
if __name__ == "__main__":
    PROJECT_ID = "你的GCP项目ID"
    TARGET_REGION = "us-central1"  # 替换为你需要筛选的区域
    result = list_instances_by_region(PROJECT_ID, TARGET_REGION)
    
    print(f"区域 {TARGET_REGION} 下的实例总数: {len(result)}")
    for instance in result:
        print(f"实例名称: {instance.name}, 所属可用区: {instance.zone.split('/')[-1]}")

方法二:直接调用REST API

如果不想依赖官方客户端库,可直接通过requests库调用GCP REST API。

步骤:

  1. 安装依赖库:
pip install requests
  1. 确保本地已安装并配置gcloud工具,完成身份认证(执行gcloud auth login)

代码实现:

import requests
import subprocess

def get_gcp_access_token() -> str:
    # 调用gcloud获取临时访问令牌
    result = subprocess.run(["gcloud", "auth", "print-access-token"], capture_output=True, text=True)
    return result.stdout.strip()

def list_instances_by_region_rest(project_id: str, region: str) -> list:
    access_token = get_gcp_access_token()
    headers = {"Authorization": f"Bearer {access_token}"}
    
    # 获取目标区域下的所有可用区
    zones_url = f"https://compute.googleapis.com/compute/v1/projects/{project_id}/regions/{region}/zones"
    zones_response = requests.get(zones_url, headers=headers)
    zones_response.raise_for_status()
    zones = zones_response.json().get("items", [])
    
    instances = []
    # 遍历可用区拉取实例数据
    for zone in zones:
        zone_name = zone["name"]
        instances_url = f"https://compute.googleapis.com/compute/v1/projects/{project_id}/zones/{zone_name}/instances"
        try:
            instances_response = requests.get(instances_url, headers=headers)
            instances_response.raise_for_status()
            instances.extend(instances_response.json().get("items", []))
        except Exception as e:
            print(f"获取可用区 {zone_name} 实例失败: {str(e)}")
    
    return instances

# 使用示例
if __name__ == "__main__":
    PROJECT_ID = "你的GCP项目ID"
    TARGET_REGION = "us-central1"
    result = list_instances_by_region_rest(PROJECT_ID, TARGET_REGION)
    
    print(f"区域 {TARGET_REGION} 下的实例总数: {len(result)}")
    for instance in result:
        print(f"实例名称: {instance['name']}, 所属可用区: {instance['zone'].split('/')[-1]}")

注意事项:

  • 确保账号拥有compute.instances.list和compute.zones.list权限
  • 生产环境中建议使用服务账号密钥认证,避免依赖本地gcloud工具

内容的提问来源于stack exchange,提问作者Roua Khenissi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 07:54:22