Terraform: облачные конечные точки в сервисе Cloud Run?

Есть ли способ запустить Cloud Endpoints в сервисе Cloud Run?

Допустим, у меня есть следующий main.tf, и я хочу использовать URL-адрес Cloud Run при определении своих служб Cloud Endpoints. Этот URL-адрес предположительно хранится в google_cloud_run_service.cloud-run.status.url. Приведенная ниже конфигурация вызывает ошибку.

Вывод из terraform plan:

Error: Unsupported attribute

  on main.tf line 411, in resource "google_endpoints_service" "cloud-run":
 411:   service_name = "${google_cloud_run_service.cloud-run.status.url}"

This value does not have any attributes.

main.tf:

[...]
#############
# Cloud Run #
#############
resource "google_cloud_run_service" "cloud-run" {
  name     = "cloud-run"
  provider = "google-beta"
  location = "europe-west1"
  metadata {
    namespace = "${var.gcp_project[var.env]}"
  }
  spec {
    containers {
      image = "gcr.io/endpoints-release/endpoints-runtime-serverless@sha256:a12b14dd6d31a88637ca7c9e63724ad542226d9509421ba08ed4452a91ce751e"
    }
    container_concurrency = var.env != "dev" ? 0 : 1
  }
}

###################
# Cloud Endpoints #
###################
resource "google_endpoints_service" "pre-pairing-api" {
  # The service name, AFAIK, should be Cloud Run's URL:
  service_name = "${google_cloud_run_service.cloud-run.status.url}" #  <--------
  openapi_config = <<EOF
swagger: '2.0'
info:
  title: Pre-pairing
  description: API on Cloud Endpoints with a Google Cloud Functions backend...
  version: 1.0.0
# Same applies to the host. It should be, AFAIK, Cloud Run's URL.
host: "${google_cloud_run_service.cloud-run.status.url}" # <--------
[...]

Я что-то упускаю или неправильно понимаю? Заранее спасибо!


comment
Глядя здесь ... terraform.io/docs/providers/google/r /cloud_run_service.html ... есть предупреждение об использовании этого с поставщиком terraform-provider-google-beta. Вы это сделали?   -  person Kolban    schedule 28.10.2019
comment
Чтение ссылки на атрибуты внизу ... terraform.io/docs /providers/google/r/cloud_run_service.html ... У меня сложилось впечатление, что определение среды Cloud Run с помощью Terraform является асинхронной операцией и что ее состояние постоянно меняется до тех пор, пока условия обслуживания не перейдут к желаемому результату . Другими словами, здесь может быть состояние гонки, когда вы создаете определение Cloud Run, но данные состояния не готовы к использованию, когда вы вызываете определения Cloud Endpoints.   -  person Kolban    schedule 28.10.2019
comment
Спасибо за вклад @Kolban. Что касается бета-провайдера, да, он установлен правильно: provider = "google-beta". Я также подумал о состоянии гонки. Это может быть проблема здесь ... но в данный момент я не знаю, как решить эту проблему.   -  person Oleg Korol    schedule 28.10.2019


Ответы (2)


Я нашел решение для этого:

# main.tf
[...]
#############
# Cloud Run #
#############
resource "google_cloud_run_service" "cloud-run" {
  [...]
}


# The URL was located under `status[0].url` instead of `status.url`.
# I have created a local variable to store its value.
locals {
  cloud_run_url = google_cloud_run_service.cloud-run.status[0].url
}

###################
# Cloud Endpoints #
###################
resource "google_endpoints_service" "some-api" {
  service_name = "${replace(local.cloud_run_url, "https://", "")}" # <--------
  openapi_config = <<EOF
swagger: '2.0'
info:
  title: Some-API
  description: API on Cloud Endpoints with a Google Cloud Functions backend...
  version: 1.0.0
host: "${replace(local.cloud_run_url, "https://", "")}" # <--------
[...]
EOF

depends_on = ["google_cloud_run_service.cloud-run"]

Я еще не уверен на 100%, что это сработает при первом запуске. Тем не менее, я ожидаю, что depends_on (см. Выше) позаботится об этой зависимости и дождется создания Cloud Run, прежде чем приступить к созданию службы Cloud Endpoints.

person Oleg Korol    schedule 29.10.2019

Вы можете настроить Cloud Endpoints для Cloud Run, следуя этой документации < / а>.

Ваш файл main.tf не ждет, пока служба Cloud Run будет готова, чтобы перейти к следующим шагам по развертыванию контейнера Extensible Service Proxy (ESP) в Cloud Run.

Пример использования здесь показывает, как использовать локальную переменную для ожидания готовности службы Cloud Run.

person Daniel Ocando    schedule 29.10.2019