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

Terraform首次apply路由表routes为空,二次apply才正常?

Terraform路由表输出首次为空的问题解决

问题出在你这段代码的嵌套for循环存在变量名遮蔽:外部循环遍历路由表的变量是rtable,内部遍历路由条目的循环也用了rtable当变量名,这会让Terraform首次执行时,内部变量覆盖了外部的路由表资源对象,导致无法正确读取路由数据。第二次执行时,资源已经写入状态文件,Terraform能直接从状态里拉取完整数据,所以输出正常。

修复后的代码

把内部循环的变量名换成不重复的名称,比如route_entry:

output_rtables = {
  for rtable in aws_route_table.rtable : rtable.id => {
    id                      = rtable.id
    name                    = rtable.tags["Name"]
    vpc                     = rtable.vpc_id
    routes                  = flatten([
      for route_entry in rtable.route : {
        for key, value in route_entry : key => value if value != ""
      }
    ])
  }
}

补充说明

这种变量名遮蔽的问题不会触发Terraform语法错误,但会导致数据解析异常,出现首次执行输出不正确、后续执行恢复正常的诡异情况。修改后重新执行terraform apply,首次就能正确输出路由条目了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 11:50:13