如何用Node.js/Python客户端执行Google Cloud Run Job时传递环境变量
问题:通过客户端库为Cloud Run Job执行传递环境变量
我需要执行Google Cloud Run Job并传递环境变量,就像使用gcloud CLI的以下命令一样:
gcloud run jobs execute <test-job> --update-env-vars key1=value1,key2=value2
希望通过Google Cloud Run的Node.js或Python客户端库实现相同功能,现有Node.js代码片段如下:
/** // const overrides = {}; // Imports the Run library const {JobsClient} = require('@google-cloud/run').v2; // Instantiates a client const runClient = new JobsClient(); async function callRunJob() { // Construct request const request = { name, // overrides, }; // Run request const [operation] = await runClient.runJob(request); const [response] = await operation.promise(); console.log(response); } callRunJob();
Node.js 解决方案
要实现--update-env-vars的效果,需要配置overrides参数,在其中定义Job执行时的模板覆盖规则,具体是修改容器的环境变量:
const {JobsClient} = require('@google-cloud/run').v2; const runClient = new JobsClient(); async function callRunJob() { // 替换为你的Job完整名称,格式:projects/[PROJECT_ID]/locations/[LOCATION]/jobs/[JOB_NAME] const name = 'projects/your-project/locations/us-central1/jobs/test-job'; // 定义要传递的环境变量,对应--update-env-vars的参数 const envVars = { key1: 'value1', key2: 'value2' }; // 构造overrides,覆盖Job的模板配置 const overrides = { template: { containers: [{ env: Object.entries(envVars).map(([key, value]) => ({ name: key, value: value })) }] } }; const request = { name, overrides, }; const [operation] = await runClient.runJob(request); const [response] = await operation.promise(); console.log('Job执行响应:', response); } callRunJob();
Python 解决方案
使用Python的google-cloud-run客户端库,同样通过配置overrides来传递环境变量:
首先确保安装依赖:
pip install google-cloud-run
然后编写代码:
from google.cloud import run_v2 def run_job_with_env_vars(): client = run_v2.JobsClient() # 替换为你的Job完整名称 name = "projects/your-project/locations/us-central1/jobs/test-job" # 定义环境变量 env_vars = { "key1": "value1", "key2": "value2" } # 构造覆盖模板 overrides = run_v2.RunJobRequest.Overrides() overrides.template.containers.add( env=[ run_v2.EnvVar(name=key, value=value) for key, value in env_vars.items() ] ) request = run_v2.RunJobRequest( name=name, overrides=overrides ) operation = client.run_job(request=request) print("等待Job执行完成...") response = operation.result() print(f"Job执行响应: {response}") if __name__ == "__main__": run_job_with_env_vars()
说明
overrides.template.containers会覆盖Job原有容器的配置,这里仅设置环境变量,其他配置会沿用Job的原始定义- 需要确保客户端库版本是最新的,避免API兼容性问题
内容的提问来源于stack exchange,提问作者Dinesh Sonachalam
相关产品推荐
相关产品推荐

