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

如何用Python过滤GCP中带goog-前缀标签的实例,仅获取原生GCE实例

GCE实例过滤方案说明

核心限制说明

GCP Compute API的过滤语法和Cloud Logging的过滤语法是两套独立规则,前者本身不支持通配符前缀/正则匹配,你当前写的filter="labels != goog-*"属于无效语法,无法生效。

可行实现方案

方案1:全量拉取后本地过滤(最稳妥,覆盖所有goog-前缀标签)

无需依赖API侧的过滤能力,拉取所有实例后在本地做规则匹配即可,完整代码如下:

from googleapiclient.discovery import build

service = build('compute', 'v1', credentials=credentials)
request = service.instances().aggregatedList(project="my-project")
response = request.execute()

native_gce_instances = []
# 遍历所有区域的实例
for zone, zone_resource in response.get('items', {}).items():
    # 跳过无实例的区域
    if 'instances' not in zone_resource:
        continue
    for instance in zone_resource['instances']:
        labels = instance.get('labels', {})
        # 排除任意标签键以goog-开头的实例
        if not any(key.startswith('goog-') for key in labels.keys()):
            native_gce_instances.append(instance)

方案2:API侧预过滤(减少拉取数据量,需要维护已知标签列表)

Compute API支持用labels.标签名:*语法判断某个标签是否存在,这里的*是专属的存在性判定符,不是通用通配符,你可以把常见的谷歌服务自动生成的goog-前缀标签显式列入排除规则,示例如下:

from googleapiclient.discovery import build

service = build('compute', 'v1', credentials=credentials)
# 显式排除已知的谷歌服务自动创建实例的标签
filter_rule = """
NOT labels.goog-gke-node:* 
AND NOT labels.goog-dataproc-worker:* 
AND NOT labels.goog-compute-image-tools:*
AND NOT labels.goog-cloud-run-worker:*
"""
request = service.instances().aggregatedList(project="my-project", filter=filter_rule)

该方案的缺点是如果GCP新增了其他goog-前缀的服务标签,需要同步更新过滤规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:42:01