Terraform调试plan变量值报错:模块无outputs属性的解决办法
解决Terraform for_each模块输出访问报错的问题
你遇到的问题是对Terraform模块实例的输出访问方式理解有误——当用for_each实例化模块时,module.policies是一个键值映射,每个模块实例的输出直接挂在实例对象上,根本不存在outputs这个属性层级,所以module.policies[*].outputs.debug才会报错。
正确的访问方式
假设你的模块内已经正确定义了输出:
# 模块内的输出定义 output "debug" { value = local.policy }
1. 访问单个模块实例的debug输出
直接通过for_each的键定位实例,比如你的for_each用的是{ policy_a = ..., policy_b = ... },访问其中一个实例的debug写法是:
module.policies["policy_a"].debug
2. 批量获取所有实例的debug输出
如果要一次性拿到所有模块实例的debug内容,有两种常用写法:
- 用
values()函数把映射转成实例列表,再提取debug:values(module.policies)[*].debug - 用
for表达式生成列表:[for policy_instance in module.policies : policy_instance.debug]
实操示例
比如你在根模块里这样调用模块:
module "policies" { source = "./path/to/your/policy-module" for_each = { s3_policy = { resource_type = "s3" } ec2_policy = { resource_type = "ec2" } } # 其他需要传递的变量... }
想要在terraform plan时看到所有debug内容,直接在根模块加个输出:
output "all_policy_debugs" { value = values(module.policies)[*].debug }
执行terraform plan或terraform apply时,就能看到这个输出的内容了。
另外,也可以用terraform console实时测试访问,直接在控制台输入values(module.policies)[*].debug就能看到结果,方便快速调试。
内容的提问来源于stack exchange,提问作者pkaramol
相关产品推荐
相关产品推荐

