使用Terraform count创建多ALB后输出属性报错求助
问题分析与解决方案
错误原因说明
- 第一个错误:
i.Name属性不存在。你在EC2输出中使用的i.tags.Name是EC2实例标签里的字段,但ALB模块的输出属性并非Name(大写),而是对应你在模块中设置的name参数(小写),或者模块输出的其他命名属性(比如lb_name,取决于模块定义)。 - 第二个错误:Terraform的
for表达式构建map时,必须明确指定键-值对,你只提供了值表达式,缺少键部分,因此触发语法错误。
解决方案
方案1:利用模块输出的name属性作为键
如果你的ALB模块会输出你配置的name参数值(即lower("SH-alb-${count.index+1}")),直接用该属性作为map的键:
output "ex_alb_map" { value = { for alb in module.ex-alb: alb.name => "${alb.lb_id}:${alb.lb_dns_name}:${alb.security_group_id}" } }
方案2:手动生成一致名称作为键(不依赖模块输出)
如果不确定模块是否输出name属性,可以直接复用模块中定义的命名规则生成键,避免属性名匹配问题:
output "ex_alb_map" { value = { for idx, alb in module.ex-alb: lower("SH-alb-${idx+1}") => "${alb.lb_id}:${alb.lb_dns_name}:${alb.security_group_id}" } }
方案3:输出结构化数据(推荐)
如果需要更易读的输出格式,可以放弃字符串拼接,输出嵌套map:
output "ex_alb_details" { value = { for idx, alb in module.ex-alb: lower("SH-alb-${idx+1}") => { id = alb.lb_id dns_name = alb.lb_dns_name security_group_id = alb.security_group_id } } }
内容的提问来源于stack exchange,提问作者V S
相关产品推荐
相关产品推荐

