You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Terraform的output.tf中检查对象空值与属性存在性

解决方案

要处理module.ilb_app中部分元素缺少health_check_ids或healthcheck属性的问题,不能直接对整个splat表达式使用try——因为splat会遍历所有元素,只要有一个元素属性缺失就会触发全局错误。正确的做法是用显式for循环逐个处理每个元素,在循环体内用try捕获单个元素的属性访问错误:

output "health_check_ids_app" {
  description = "Autogenerated health check ids."
  value = [
    for app in module.ilb_app :
    try(app.health_check_ids.healthcheck, null)
  ]
}

补充说明:

  • try(app.health_check_ids.healthcheck, null)会对每个app元素单独检查:如果能正常访问到health_check_ids.healthcheck就返回对应值,否则返回null,不会中断整个输出的生成。
  • 如果希望输出列表中自动过滤掉null值,可以搭配compact函数:
    output "health_check_ids_app" {
      description = "Autogenerated health check ids."
      value = compact([
        for app in module.ilb_app :
        try(app.health_check_ids.healthcheck, null)
      ])
    }
    
  • 若需要更精细的判断(比如区分是health_check_ids不存在还是healthcheck不存在),可以嵌套try:
    try(try(app.health_check_ids, {}).healthcheck, null)
    
    这种写法会先检查app是否有health_check_ids属性,没有则返回空对象,再检查空对象的healthcheck属性,最终返回null。

内容的提问来源于stack exchange,提问作者ajit singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 17:05:03