使用Terraform AWS EC2 Instance模块获取public_ip时属性报错
问题解决:Terraform EC2模块输出public_ip报错
错误原因
你在模块中使用了for_each,这会让module.ec2_instance变成一个映射(Map)类型(键为"one"、"two"、"three",对应每个实例模块),而不是列表类型。原来的.*语法仅适用于count创建的列表资源,因此无法直接用在映射上访问public_ip属性。
解决方案
针对映射类型的模块实例,有两种正确的输出方式:
方式1:输出所有实例的公网IP列表
使用values()函数提取映射中所有实例的public_ip,得到一个纯IP列表:
output "ec2_publicip" { description = "Public IPs of EC2 Instances" value = values(module.ec2_instance)[*].public_ip }
方式2:输出带实例标识的公网IP映射
如果需要保留每个实例的键("one"/"two"/"three")与IP的对应关系,可以直接遍历映射:
output "ec2_publicip" { description = "Public IPs of EC2 Instances mapped by instance key" value = { for k, instance in module.ec2_instance : k => instance.public_ip } }
验证说明
模块文档中确实存在public_ip输出属性,但该属性的访问方式取决于模块实例的创建方式:count生成列表用.*,for_each生成映射则需要用上述映射遍历/值提取的方式。
内容的提问来源于stack exchange,提问作者meallhour
相关产品推荐
相关产品推荐

