google-cloud-platform - Terraform:Cloud Run 服务上的云端点?

标签 google-cloud-platform terraform google-cloud-endpoints google-cloud-run terraform-provider-gcp

有没有办法在 Cloud Run 服务上运行 Cloud Endpoints?

假设我有以下 main.tf我想在定义 Cloud Endpoints 服务时使用 Cloud Run 的 URL。
该 URL 应该存储在 google_cloud_run_service.cloud-run.status.url 下.
下面的配置会引发错误。

来自 terraform plan 的输出:

Error: Unsupported attribute

  on main.tf line 411, in resource "google_endpoints_service" "cloud-run":
 411:   service_name = "${google_cloud_run_service.cloud-run.status.url}"

This value does not have any attributes.

主要.tf:
[...]
#############
# Cloud Run #
#############
resource "google_cloud_run_service" "cloud-run" {
  name     = "cloud-run"
  provider = "google-beta"
  location = "europe-west1"
  metadata {
    namespace = "${var.gcp_project[var.env]}"
  }
  spec {
    containers {
      image = "gcr.io/endpoints-release/endpoints-runtime-serverless@sha256:a12b14dd6d31a88637ca7c9e63724ad542226d9509421ba08ed4452a91ce751e"
    }
    container_concurrency = var.env != "dev" ? 0 : 1
  }
}

###################
# Cloud Endpoints #
###################
resource "google_endpoints_service" "pre-pairing-api" {
  # The service name, AFAIK, should be Cloud Run's URL:
  service_name = "${google_cloud_run_service.cloud-run.status.url}" #  <--------
  openapi_config = <<EOF
swagger: '2.0'
info:
  title: Pre-pairing
  description: API on Cloud Endpoints with a Google Cloud Functions backend...
  version: 1.0.0
# Same applies to the host. It should be, AFAIK, Cloud Run's URL.
host: "${google_cloud_run_service.cloud-run.status.url}" # <--------
[...]

我是否遗漏或误解了什么?
提前致谢!

最佳答案

我为此找到了解决方案:

# main.tf
[...]
#############
# Cloud Run #
#############
resource "google_cloud_run_service" "cloud-run" {
  [...]
}


# The URL was located under `status[0].url` instead of `status.url`.
# I have created a local variable to store its value.
locals {
  cloud_run_url = google_cloud_run_service.cloud-run.status[0].url
}

###################
# Cloud Endpoints #
###################
resource "google_endpoints_service" "some-api" {
  service_name = "${replace(local.cloud_run_url, "https://", "")}" # <--------
  openapi_config = <<EOF
swagger: '2.0'
info:
  title: Some-API
  description: API on Cloud Endpoints with a Google Cloud Functions backend...
  version: 1.0.0
host: "${replace(local.cloud_run_url, "https://", "")}" # <--------
[...]
EOF

depends_on = ["google_cloud_run_service.cloud-run"]

不过,我还不能 100% 确定这是否适用于第一次运行。尽管如此,我还是希望 depends_on (见上文)处理此依赖关系并等待 Cloud Run 创建,然后再继续创建 Cloud Endpoints 服务。

关于google-cloud-platform - Terraform:Cloud Run 服务上的云端点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58596309/

相关文章:

google-app-engine - 使用新的 Google+ 登录的 Appengine Cloud Endpoints

java - Cloud Endpoints Portal 的身份验证问题

google-cloud-platform - 如何添加 `default-allow-http`

java - 通过 IAM ServiceAccount 进行跨项目 PubSub 订阅

amazon-web-services - 地形错误 : Invalid value for module argument

aws-lambda - AWS Lambda 在运行 Terraform Plan 时没有 Python3.9 运行时上下文?

amazon-web-services - 在 Terraform 中将多个容器映射到应用程序负载均衡器

google-app-engine - 已部署的 Appengine 云端点 403

kubernetes - 通过google-kubernetes-engine部署:内部服务器错误[500](Google云平台)

google-app-engine - 为什么选择 Google Kubernetes Engine 而不是 Google AppEngine?