【问题标题】:Cannot deploy public api on Cloud Run using Terraform无法使用 Terraform 在 Cloud Run 上部署公共 API
【发布时间】:2020-01-13 02:01:26
【问题描述】:

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 时,它返回 403(Forbidden) 响应。 是否可以使用 terraform 创建公共云运行 api?

(当我使用 GUI 创建相同的服务时,GCP 在“身份验证”部分下提供了“允许未经身份验证的调用”选项,但在 terraform 文档中似乎没有等效选项...)

【问题讨论】:

    标签: google-cloud-platform terraform terraform-provider-gcp


    【解决方案1】:

    只需将以下代码添加到您的 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

    【讨论】:

      【解决方案2】:

      这里的部署仅基于 Knative 服务规范。 Cloud Run managed 实现了这些规范,但有自己的内部行为,例如与 IAM 链接的角色检查(Knative 和 K8S 集群无法实现,这已被私有/公共服务取代)。 Cloud Run 上托管的命名空间是 projectId,例如一种用于标识项目的解决方法,而不是真正的 K8S 命名空间。

      所以,我从 Google(我是 Cloud Run Alpha Tester)获得的最新消息告诉他们正在使用 Deployment Manager 和 Terraform 将 Cloud Run 集成到其中。我没有截止日期,抱歉。

      【讨论】:

      • 谢谢。希望有一天它会可用:)
      • 对不起,我不太明白:目前有解决此问题的方法吗?
      • 今天使用 Terraform,您必须部署您的服务并明确添加 iam 策略投标以公开您的服务。你不能在同一个 terraform 资源定义中做所有事情。
      猜你喜欢
      • 2021-07-07
      • 2020-03-01
      • 2023-02-14
      • 2020-08-27
      • 2020-06-26
      • 1970-01-01
      • 2021-12-20
      • 2021-07-22
      • 2020-08-04
      相关资源
      最近更新 更多