Я ищу способ использовать 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 Начало работы с конечными точками для работы в облаке