无法使用 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