【发布时间】:2020-02-24 00:53:04
【问题描述】:
有没有办法在 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.
main.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}" # <--------
[...]
我是否遗漏或误解了什么? 提前致谢!
【问题讨论】:
-
看这里 ... terraform.io/docs/providers/google/r/cloud_run_service.html ... 有一个关于将其与 terraform-provider-google-beta 提供程序一起使用的警告。你做到了吗?
-
阅读底部的属性引用 ... terraform.io/docs/providers/google/r/cloud_run_service.html ... 我的印象是,通过 Terraform 定义 Cloud Run 环境是一个异步操作,并且它的状态一直在变化,直到服务条件切换到您想要的结果。换句话说,我们可能在此处存在竞争条件,您正在创建 Cloud Run 定义,但在您调用 Cloud Endpoints 定义时状态数据尚未准备好使用。
-
感谢@Kolban 的输入。关于 beta 提供程序,是的,它设置正确:
provider = "google-beta"。我还考虑了比赛条件。这可能是这里的问题......但目前我不知道如何解决这个问题。
标签: google-cloud-platform terraform google-cloud-endpoints google-cloud-run terraform-provider-gcp