无法使用 Terraform 在云 运行 上部署 public api
Cannot deploy public api on Cloud Run using Terraform
Terraform 现在支持云 运行 记录 here,
我正在尝试下面的示例代码。
resource "google_cloud_run_service" "default" {
name = "tftest-cloudrun"
location = "us-central1"
provider = "google-beta"
metadata {
namespace = "my-project-name"
}
spec {
containers {
image = "gcr.io/cloudrun/hello"
}
}
}
虽然它部署了示例 hello 服务没有错误,但当我访问自动生成的 URL 时,它 returns 403(禁止访问)响应。
是否可以使用 terraform 创建 public 云 运行 api?
(当我使用 GUI 创建相同的服务时,GCP 在 "Authentication" 部分下提供 "Allow unauthenticated invocations" 选项,但在 terraform 文档中似乎没有等效选项...)
此处部署仅基于 Knative 服务规范。云 运行 托管实现了这些规范,但有自己的内部行为,比如与 IAM 链接的角色检查(Knative 和 K8S 集群不可能,这被 Private/Public 服务取代)。 Cloud 运行 managed 上的命名空间是 projectId,例如用于标识项目的解决方法,而不是真正的 K8S 命名空间。
所以,我从 Google(我是 Cloud 运行 Alpha 测试员)那里得到的最新消息表明他们正在与 Deployment Manager 和 Terraform 合作以集成 Cloud 运行在他们中。我没有截止日期,抱歉。
只需将以下代码添加到您的 terraform 脚本中,即可公开访问
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
}
你也可以找到这个here
Terraform 现在支持云 运行 记录 here, 我正在尝试下面的示例代码。
resource "google_cloud_run_service" "default" {
name = "tftest-cloudrun"
location = "us-central1"
provider = "google-beta"
metadata {
namespace = "my-project-name"
}
spec {
containers {
image = "gcr.io/cloudrun/hello"
}
}
}
虽然它部署了示例 hello 服务没有错误,但当我访问自动生成的 URL 时,它 returns 403(禁止访问)响应。 是否可以使用 terraform 创建 public 云 运行 api?
(当我使用 GUI 创建相同的服务时,GCP 在 "Authentication" 部分下提供 "Allow unauthenticated invocations" 选项,但在 terraform 文档中似乎没有等效选项...)
此处部署仅基于 Knative 服务规范。云 运行 托管实现了这些规范,但有自己的内部行为,比如与 IAM 链接的角色检查(Knative 和 K8S 集群不可能,这被 Private/Public 服务取代)。 Cloud 运行 managed 上的命名空间是 projectId,例如用于标识项目的解决方法,而不是真正的 K8S 命名空间。
所以,我从 Google(我是 Cloud 运行 Alpha 测试员)那里得到的最新消息表明他们正在与 Deployment Manager 和 Terraform 合作以集成 Cloud 运行在他们中。我没有截止日期,抱歉。
只需将以下代码添加到您的 terraform 脚本中,即可公开访问
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
}
你也可以找到这个here