【问题标题】:How to create a job with Google Cloud scheduler Python api如何使用 Google Cloud 调度程序 Python api 创建作业
【发布时间】:2020-06-26 03:08:55
【问题描述】:

我想创建一个每天上午 10 点运行的 cron 作业以触发云功能。但是,我遇到了 Python api 的问题。当我创建作业时,它会弹出此错误。

TypeError:MergeFrom() 的参数必须是同一类的实例:预期的 google.cloud.scheduler.v1.HttpTarget 得到了 str。

这是我的代码:

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)

【问题讨论】:

    标签: python python-3.x google-cloud-platform google-cloud-scheduler


    【解决方案1】:

    你有没有尝试过:

    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 对象,而不仅仅是一个字符串。

    【讨论】:

      【解决方案2】:

      假设utc+8 is Australia/Perthjob 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)
      

      【讨论】:

      • 感谢您的评论,我能够创造这份工作:)。
      • 如果我的回答对您有所帮助,请将其标记为已接受,以便为社区提高知名度。
      • 您能告诉我为什么作业名称是完整路径吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-20
      • 2021-03-17
      • 2020-05-30
      • 2018-04-30
      • 2020-04-08
      • 1970-01-01
      相关资源
      最近更新 更多