如何在Terraform中将多EC2实例的ID、名称与公网IP合并为单行输出?
解决方案
可以通过Terraform的zip函数结合for表达式实现需求,将对应实例的名称、ID和公网IP拼接成指定格式的字符串。
最终输出配置
output "ec2_instance_info" { value = [ for item in zip( aws_instance.ec2instance[*].tags["Name"], aws_instance.ec2instance[*].id, aws_eip.eip_mgmt_ec2instance[*].public_ip ) : "${item[0]}: ${item[1]} -> ${item[2]}" ] }
逻辑说明
zip函数打包对应元素:zip会把三个列表中同一索引位置的元素打包成元组,保证每个元组对应同一个EC2实例的名称、ID和公网IP。for表达式拼接字符串:遍历每个元组,通过字符串插值将元组内的三个元素拼接成实例名称: 实例ID -> 公网IP的格式。- 输出结果:最终会输出一个字符串列表,每个元素对应一行实例的完整信息。
注意:要确保
aws_instance.ec2instance和aws_eip.eip_mgmt_ec2instance的数量一致,否则zip会以最短的列表长度为准,多余的实例或EIP信息会被忽略。
内容的提问来源于stack exchange,提问作者acmesoft
相关产品推荐
相关产品推荐

