Проблемы с API GCP Cloud Scheduler

#google-cloud-platform #terraform #google-apis-explorer #google-cloud-scheduler

#google-облачная платформа #terraform #google-api-проводник #google-cloud-scheduler

Вопрос:

Я пытаюсь протестировать настройку заданий GCP Cloud Scheduler с помощью terraform и обнаруживаю проблемы при попытке создания через API. Я также тестирую API на этой странице:projects.locations.jobs/create. Ошибки, которые я вижу, связаны с недопустимым аргументом:

 {
  "error": {
    "code": 400,
    "message": "Job name must be formatted: "projects/u003cPROJECT_IDu003e/locations/u003cLOCATION_IDu003e/jobs/u003cJOB_IDu003e".",
    "status": "INVALID_ARGUMENT"
  }
}
  

Затем я изменяю этот формат и вижу эту ошибку:

 {
  "error": {
    "code": 400,
    "message": "Resource name should start with "/projects/u003cPROJECT_IDu003e/"",
    "status": "INVALID_ARGUMENT"
  }
}
  

Вот как выглядит тело запроса:

 {
  "name": "projects/<my-project-id>/locations/us-central1/jobs/snapshots",
  "pubsubTarget": {
    "topicName": "disk-snapshot-function-trigger",
    "attributes": {
      "num_backups": "5",
      "project": "<my-project-id>"
    }
  },
  "schedule": "0 19 * * *",
  "timeZone": "America/Los_Angeles"
}
  

На самом деле выигрыша нет, все запросы выдают ОШИБКУ 400.

Комментарии:

1. Как terraform связана с этой проблемой? Удалите этот тег. Ваш topicName отформатирован неправильно projects/PROJECT_ID/topics/TOPIC_ID

2. @JohnHanley Спасибо за предложение. Я смог заставить его работать в Terraform, добавив project/PROEJCT_ID/topics/TOPIC_ID префикс к названию темы pubsub

3. Ваш ответ делает тег terraform ценным. Спасибо.

Ответ №1:

Таким образом, все работало правильно:

 {
  "name": "projects/PROJECT_ID/locations/us-central1/jobs/snapshots",
  "pubsubTarget": {
    "topicName": "projects/PROJECT_ID/topics/disk-snapshot-function-trigger",
    "attributes": {
      "num_backups": "5",
      "project": "PROJECT_ID"
    }
  },
  "schedule": "0 19 * * *",
  "timeZone": "America/Los_Angeles"
}
  

или с Terraform:

 resource "google_cloud_scheduler_job" "snapshot_schedule" {
  provider  = "google-beta"
  name      = "snapshots"
  schedule  = "${var.snapshot_schedule}"
  time_zone = "America/Los_Angeles"
  project   = "${var.project_id}"

  pubsub_target {
    topic_name = "projects/${var.project_id}/topics/${google_pubsub_topic.trigger_disk_snapshot_function_pubsub.name}"
    data       = "${base64encode("{"project":"${var.project_id}", "num_backups":"${var.num_backups}"}")}"
  }
}