想要通过 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 扩展的源以处理云 运行 服务的创建,我们会发现:
在评论中,我们发现以下内容:
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.
我想使用 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 扩展的源以处理云 运行 服务的创建,我们会发现:
在评论中,我们发现以下内容:
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.