Создание конечной точки в облаке с Terraform и Google Cloud Platform - PullRequest
0 голосов
/ 19 июня 2020

Я ищу способ использовать Terraform с поставщиком GCP для создания конечной точки выполнения в облаке. Для начала я создаю тестовые данные - простой привет, мир. У меня настроена служба облачного запуска ресурсов и настроен ресурс конечных точек облака с конечными точками облака, которые зависят от запуска облака. Однако я пытаюсь передать URL-адрес облачного запуска в качестве имени службы конечным точкам облака. Файл создается в соответствии с передовой практикой с использованием модуля> облачного запуска и облачного ресурса конечных точек. Однако интерполяция Terraform для передачи вывода service_name = "$ {google_cloud_run_service.default.status [0] .url}" Terraform пропускает ошибку: недопустимый символ. Я также пробовал module.folder.output.url. У меня есть openapi_config.yml, жестко запрограммированный в конфигурации TF, мне интересно, возможно ли, чтобы он работал. Я исследую многие сообщения, а некоторые форумы устарели.

 #Cloud Run
 resource "google_cloud_run_service" "default" {
 name     = var.name
 location = var.location

 template {
   spec {
     containers {
       image = "gcr.io/cloudrun/hello"
     }
   }




   metadata {
     annotations = {
       "autoscaling.knative.dev/maxScale" = "1000"
       "run.googleapis.com/cloudstorage"  = "project_name:us-central1:${google_storage_bucket.storage-run.name}"
       "run.googleapis.com/client-name"   = "terraform"
     }
   }
 }
 traffic {
   percent         = 100
   latest_revision = true
 }
 autogenerate_revision_name = true
}
output "url" {
 value = "${google_cloud_run_service.default.status[0].url}"
}

data "google_iam_policy" "noauth" {
 binding {
   role = "roles/run.invoker"
   members = [
     "allUsers",
   ]
 }
}

resource "google_cloud_run_service_iam_policy" "noauth" {
 location = google_cloud_run_service.default.location
 project  = google_cloud_run_service.default.project
 service  = google_cloud_run_service.default.name

 policy_data = data.google_iam_policy.noauth.policy_data
}

#CLOUD STORAGE
resource "google_storage_bucket" "storage-run" {
 name          = var.name
 location      = var.location
 force_destroy = true

 bucket_policy_only = true


}


data "template_file" "openapi_spec" {
 template = file("${path.module}/openapi_spec.yml")
}

#CLOUD ENDPOINT SERVICE 
resource "google_endpoints_service" "api-service" {
 service_name   = "api_name.endpoints.project_name.cloud.goog"
 project        = var.project
 openapi_config    = data.template_file.openapi_spec.rendered
}


ОШИБКА: googleapi: Ошибка 400: имя службы «CLOUD_RUN_ESP_NAME», указанное в файлах конфигурации, не соответствует имени службы «api_name.endpoints.project_name.cloud.goog», указанному в запросе., badRequest

Позднее я обнаружил, что имя службы должно совпадать с URL-адресом службы esp хоста / облака без https: //, чтобы облачные службы конечных точек были инициаторами. В документах Terraform указано иное в форме "$ apiname.endpoints. $ Projectid.cloud.goog" terraform_cloud_endpoints , а в документах GCP указано, что облачная служба ESP должна иметь URL без https: //> gateway. -12345-u c .a.run.app Начало работы с конечными точками для работы в облаке

...