Хотите развернуть сервис Google Cloud Run через Terraform - PullRequest
1 голос
/ 15 марта 2020

Я хочу развернуть облачный сервис Google, используя Terraform. Когда я пытаюсь выполнить развертывание через блок 'port' для определения порта контейнера и получения ошибки, я должен передать порт контейнера из тега шаблона, но не могу этого сделать. Вот мой файл .tf -

resource "google_cloud_run_service" "default" {
  name     = "cloudrun-srv"
  location = "us-central1"

  template {
    spec {
      containers {
        image = "us.gcr.io/xxxxxx/xxxx.app"

        port {
          container_port = 19006
        }
      }
    }
  }

  traffic {
    percent         = 100
    latest_revision = true
  }
}

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
}

output "url" {
  value = "${google_cloud_run_service.default.status[0].url}"
}

С тегом порта, вот ошибка - enter image description here

И если я не передам блок порта, вот ошибка - enter image description here

Я должен передать значение порта контейнера как 19006, потому что мой контейнер работает только на этом порту. Как передать порт контейнера 19006 вместо порта 8080 по умолчанию. enter image description here

1 Ответ

3 голосов
/ 15 марта 2020

Я посмотрел на API REST, предоставленный Google для создания службы Cloud Run.

Это начинается с записи здесь:

POST https: // {endpoint} /apis/serving.knative.dev/v1/ enjparent‹/services

, где тело содержит Сервис .

, который содержит ServiceSpe c

, который содержит RevisionRemplate

, который содержит RevisionSpe c

, который содержит Контейнер

, который содержит ContainerPort

Если мы теперь сопоставим это с источником расширения Terraform для обработки создания Cloud Run Services, мы находим:

https://github.com/terraform-providers/terraform-provider-google/blob/2dc3da62e3844d14fb2136e09f13ea934b038411/google/resource_cloud_run_service.go#L90

и в комментариях находим следующее:

В контексте пересмотра, мы запрещаем некоторые поля этого контейнера, в том числе: name, ports и volumeMounts. Контракт времени выполнения задокументирован здесь: https://github.com/knative/serving/blob/master/docs/runtime-contract.md

Хотя name и volumeMounts кажутся ok мне на данный момент, я не чувствую причину что ports не отображаются.

Из этого, однако, я вижу, что неспособность указать порт через Terraform, кажется, явная, а не упущение. Мне также кажется, что возможность указать порт действительно присутствует в REST API в Google.

Затем я собирался предложить вам исправить дефект через Github, но затем подумал, существует ли он уже. Я немного покопался, и уже есть запрос на отсутствующую функцию:

Разрешить указание 'container_port' и 'request_timeout' для google_cloud_run_service

Я считаю, что ядро тогда ответом на ваш вопрос станет:

То, что вы пытаетесь сделать, должно работать с Terraform и было поднято как проблема, и мы должны дождаться разрешения в поставщике Terraform.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...