无法使用Terraform在Cloud Run上部署公共api

时间:2019-09-11 08:59:12

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

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(禁止访问)响应。 是否可以使用Terraform创建公共云运行api?

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

enter image description here

2 个答案:

答案 0 :(得分:2)

此处,部署仅基于Knative服务规范。 Cloud Run托管实现了这些规范,但是具有自己的内部行为,例如与IAM链接的角色检查(对于Knative和K8S群集是不可能的,这由私有/公共服务代替)。在Cloud Run上托管的名称空间是projectId,这是一种识别项目的变通方法,例如,不是真正的K8S名称空间。

因此,我从Google获得的最新消息(我是Cloud Run Alpha Tester)告诉他们正在与Deployment Manager和Terraform集成以将Cloud Run集成到其中。对不起,我没有截止日期。

答案 1 :(得分:0)

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