使用 Python 客户端执行具有环境变量覆盖的 GCP Cloud Run 作业

问题描述 投票:0回答:1

我正在尝试按照 run_job 文档从 python 脚本触发 GCP Cloud Run 作业(https://cloud.google.com/python/docs/reference/run/latest/google.cloud.run_v2.services.jobs .JobsClient#google_cloud_run_v2_services_jobs_JobsClient_run_job)。但是,我遇到了无法调试的错误。

这是一个已经存在的作业,但我需要覆盖一个环境变量。

这是我的代码:

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}")

这是我遇到的错误:

Traceback (most recent call last):
  File "/opt/python3.8/lib/python3.8/site-packages/airflow/decorators/base.py", line 220, in execute
    return_value = super().execute(context)
  File "/opt/python3.8/lib/python3.8/site-packages/airflow/operators/python.py", line 181, in execute
    return_value = self.execute_callable()
  File "/opt/python3.8/lib/python3.8/site-packages/airflow/operators/python.py", line 198, in execute_callable
    return self.python_callable(*self.op_args, **self.op_kwargs)
  File "/home/airflow/gcs/dags/etl.py", line 128, in run_acolite
    request = run_v2.RunJobRequest(
  File "/opt/python3.8/lib/python3.8/site-packages/proto/message.py", line 604, in __init__
    super().__setattr__("_pb", self._meta.pb(**params))
TypeError: Message must be initialized with a dict: google.cloud.run.v2.RunJobRequest

谢谢!

python google-cloud-platform google-cloud-functions cloud google-cloud-run
1个回答
0
投票

我们最近开始在工作场所使用Cloud Run Jobs服务,我发现自己需要执行相同的任务。

需要具有覆盖规范的字典。我已经根据您的示例修改了 Initialize request 块。

override_spec = {
    'container_overrides': [
        {
            'env': [
                {'name': 'VAR_1', 'value': 'var_1_value'}
            ]
        }
    ]
}

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

参考: https://cloud.google.com/python/docs/reference/run/latest/google.cloud.run_v2.types.RunJobRequest.Overrides

© www.soinside.com 2019 - 2024. All rights reserved.