Terraform: конечные точки облака в сервисе Cloud Run? - PullRequest
0 голосов
/ 28 октября 2019

Можно ли запустить облачные конечные точки в службе облачного запуска?

Допустим, у меня есть следующий main.tf, и я хочу использовать URL-адрес облачного запуска при определении своих служб облачных конечных точек. Этот 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}" # <--------
[...]

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

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

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

# 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.

0 голосов
/ 29 октября 2019

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

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

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

...