Terraform跨模块访问动态生成map的指定key值报错如何解决
问题根因
module.nlb_instance[*]使用的splat运算符会返回所有nlb_instance模块实例组成的列表,你直接对列表追加map的key索引,属于类型不匹配,因此触发map无效类报错。- 拼接的key如果和实际ALB名称存在大小写、字符、前后缀的差异,也会触发key匹配失败的报错。
解决方案
根据你nlb_instance模块的声明方式选择对应写法:
场景1:nlb_instance为单实例(未声明count)
直接删除splat运算符[*]即可:
module "nlb_listener" { # 其余无关模块属性省略 load_balancer_arn = module.nlb_instance.this_alb_id_and_name["the_alb_name_${count.index}"] }
场景2:nlb_instance为多实例(已声明count)
先定位到对应索引的模块实例,再访问其输出的map:
module "nlb_listener" { count = length(module.nlb_instance) # 可根据你的业务需求调整count值 # 其余无关模块属性省略 load_balancer_arn = module.nlb_instance[count.index].this_alb_id_and_name["the_alb_name_${count.index}"] }
注意事项
- 配置前可通过
terraform console命令打印module.nlb_instance.this_alb_id_and_name的返回值,确认key的实际格式,避免拼接的key和实际值不匹配。 - 若需要批量提取所有ALB的ARN,可通过for表达式转换,示例:
flatten([for ins in module.nlb_instance : values(ins.this_alb_id_and_name)])
内容的提问来源于stack exchange,提问作者user486670
相关产品推荐
相关产品推荐

