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

使用Python客户端调用GCP Cloud Run Job并覆盖环境变量报错

问题:Python触发GCP Cloud Run Job并覆盖环境变量时报错

尝试通过Python脚本触发已存在的GCP Cloud Run Job,需要覆盖环境变量,但执行时出现如下错误:

TypeError: Message must be initialized with a dict: google.cloud.run.v2.RunJobRequest

原代码

env_vars = [
        run_v2.EnvVar(name="VAR_1", value="var_1_value"),
        run_v2.EnvVar(name="VAR_2", value="var_2_value"),
    ]

# Set the env vars as container overrides
container_overrides = run_v2.RunJobRequest.Overrides.ContainerOverride(
        name="myjobname",
        env=env_vars
    )

request_override = run_v2.RunJobRequest.Overrides(
        container_overrides=container_overrides
)

# Initialize the request
job_name = f"projects/myproject/locations/mylocation/jobs/myjob"
request = run_v2.RunJobRequest(
        name=job_name,
        overrides=request_override
)

# Make the request
operation = client.run_job(request=request)
logging.info("Waiting for operation to complete...")

response = operation.result()
logging.info(f"Operation result: {response}")

错误原因

RunJobRequest.Overrides的container_overrides字段是列表类型(重复字段),原代码中传入了单个ContainerOverride对象而非列表,导致Proto消息初始化时类型不匹配,触发错误。

修正后的代码

env_vars = [
    run_v2.EnvVar(name="VAR_1", value="var_1_value"),
    run_v2.EnvVar(name="VAR_2", value="var_2_value"),
]

# 构建容器覆盖配置
container_overrides = run_v2.RunJobRequest.Overrides.ContainerOverride(
    name="myjobname",
    env=env_vars
)

# 注意:container_overrides需要传入列表
request_override = run_v2.RunJobRequest.Overrides(
    container_overrides=[container_overrides]
)

# 初始化请求
job_name = f"projects/myproject/locations/mylocation/jobs/myjob"
request = run_v2.RunJobRequest(
    name=job_name,
    overrides=request_override
)

# 发起请求并等待结果
operation = client.run_job(request=request)
logging.info("Waiting for operation to complete...")

response = operation.result()
logging.info(f"Operation result: {response}")

备选方案(更稳妥的字典初始化方式)

如果遇到Proto消息初始化的其他问题,可以直接用字典格式构建请求对象,避免类型匹配问题:

job_name = f"projects/myproject/locations/mylocation/jobs/myjob"
request = run_v2.RunJobRequest({
    "name": job_name,
    "overrides": {
        "container_overrides": [
            {
                "name": "myjobname",
                "env": [
                    {"name": "VAR_1", "value": "var_1_value"},
                    {"name": "VAR_2", "value": "var_2_value"}
                ]
            }
        ]
    }
})

operation = client.run_job(request=request)
logging.info("Waiting for operation to complete...")
response = operation.result()
logging.info(f"Operation result: {response}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:52:09