想要通过 Terraform 部署 Google Cloud 运行 服务

Want to deploy a Google Cloud Run service via Terraform

我想使用 Terraform 部署 google 云 运行 服务。当我尝试通过 '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}"
}

加上端口标签,这里报错-

如果我没有通过端口块,则会出现错误 -

我必须将容器端口值传递为 19006,因为我的容器仅 运行ning 在该端口上。我如何传递容器端口 19006 而不是默认端口 8080。

我查看了 Google 公开的用于创建云 运行 服务的 REST API。

从这里的条目开始:

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

正文中包含 Service.

其中包含一个 ServiceSpec

其中包含一个 RevisionRemplate

其中包含一个 RevisionSpec

其中包含一个 Container

其中包含一个 ContainerPort

如果我们现在将其映射到 Terraform 扩展的源以处理云 运行 服务的创建,我们会发现:

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

在评论中,我们发现以下内容:

In the context of a Revision, we disallow a number of the fields of this Container, including: name, ports, and volumeMounts. The runtime contract is documented here: https://github.com/knative/serving/blob/master/docs/runtime-contract.md

虽然 name 和 volumeMounts 在这一点上对我来说似乎 可以 ,但我没有感觉到 ports 未映射的原因。

虽然如此,我似乎看到无法通过 Terraform 指定端口似乎是明确的,而不是遗漏。我似乎还看到在 Google.

的 REST API 中确实存在指定端口的能力

然后我打算建议您通过 Github 提出缺陷,但后来想知道它是否已经存在。我做了一些挖掘,已经有人请求缺少的功能:

Allow specifying 'container_port' and 'request_timeout' for google_cloud_run_service

我相信你的问题的核心答案会变成:

What you are trying to do should work with Terraform and has been raised as an issue and we must wait for the resolution in the Terraform provider.