Как создать работу с планировщиком Google Cloud Python api - PullRequest
1 голос
/ 14 марта 2020

Я хотел бы создать задание cron, которое будет запускаться каждый день в 10:00 для запуска облачной функции. Однако у меня проблема с Python API. Когда я создаю задание, появляется эта ошибка.

TypeError: Параметр для MergeFrom () должен быть экземпляром того же класса: ожидаемый google.cloud.scheduler.v1.HttpTarget получил стр.

Вот мой код:

from google.cloud import scheduler_v1

project_id = XXXX
client = scheduler_v1.CloudSchedulerClient.from_service_account_json(
    r"./xxxx.json")

parent= client.location_path(project_id,'us-central1')
job={"name":"traing_for_model",
     "description":"this is for testing training model",
     "http_target":"https://us-central1-xxxx-test.cloudfunctions.net/automl-trainmodel-1-test-for-cron-job",
     "schedule":"1 0 * * *",
     "time_zone":"utc+8",
     }
training_job= client.create_job(parent,job)

Ответы [ 2 ]

1 голос
/ 15 марта 2020

Предполагая utc+8 is Australia/Perth и job that will run every day at 10am is 0 10 * * *, тогда функция должна быть:

from google.cloud import scheduler_v1

project_id = XXXX
client = scheduler_v1.CloudSchedulerClient.from_service_account_json(
    r"./xxxx.json")

parent= client.location_path(project_id,'us-central1')

job={"name":"projects/your-project/locations/app-engine-location/jobs/traing_for_model",
     "description":"this is for testing training model",
     "http_target": {"uri":"https://us-central1-gerald-automl-test.cloudfunctions.net/automl-trainmodel-1-test-for-cron-job"},
     "schedule":"0 10 * * *",
     "time_zone":"Australia/Perth",
     }

training_job= client.create_job(parent,job)
0 голосов
/ 14 марта 2020

Вы пытались сделать:

from google.cloud.scheduler_v1.types import HttpTarget as Target


from google.cloud import scheduler_v1

project_id = XXXX
client = scheduler_v1.CloudSchedulerClient.from_service_account_json(
    r"./xxxx.json")

parent= client.location_path(project_id,'us-central1')
job={"name":"traing_for_model",
     "description":"this is for testing training model",
     "http_target": Target(uri: "https://us-central1-gerald-automl-test.cloudfunctions.net/automl-trainmodel-1-test-for-cron-job"),
     "schedule":"1 0 * * *",
     "time_zone":"utc+8",
     }
training_job= client.create_job(parent,job)

Я не тестировал этот код, но ясно, что вы отправляете строку в http_target, и ее экземпляр должен быть фактический HttpTarget объект, а не просто строка.

...