在 Terraform 中读取数据源(可能不存在的 Cloud 运行 服务)中的嵌套属性

Reading nested attribute in data source (of a Cloud Run service that might not exist) in Terraform

我将 Terraform v0.14.4 与 GCP 结合使用。我有一个不使用 Terraform 管理的 Cloud 运行 服务(它可能存在也可能不存在),我想阅读它的 url.

如果该服务存在,则可以正常工作:

data "google_cloud_run_service" "myservice" {
  name = "myservice"
  location = "us-central1"
}

output "myservice" {
  value = data.google_cloud_run_service.myservice.status[0].url
}

但如果它不存在,我就无法让它工作!。我尝试过的:

有什么想法吗?

您在这里似乎有点违反此数据源的设计,但根据您显示的错误消息,行为似乎是当请求的对象时 status 为空不存在,存在时是一个列表,因此您需要编写一个可以处理这两种情况的表达式。

这是我的尝试,仅基于资源文档以及我根据您包含的错误消息所做的一些假设:

output "myservice" {
  value = (
    data.google_cloud_run_service.myservice.status != null ?
    data.google_cloud_run_service.myservice.status[0].url :
    null
  )
}

还有另一种可能更短的写法,依赖于 the try function 捕获动态错误的能力和 return 后备值,尽管这确实违背了文档中的建议因为它迫使一个不熟悉的未来 reader 做更多的猜测,以了解表达式在哪些情况下可能成功以及它可能 return 回退:

output "myservice" {
  value = try(data.google_cloud_run_service.myservice.status[0].url, null)
}