如何从Terraform的map类型输出中提取所有子网ID并传递给Lambda?
解决方案
你可以通过两种方式优化代码,避免手动指定索引:
方式一:在调用时直接提取ID列表
不用修改networking子模块,直接在main.tf里用values()配合for表达式,从map中自动提取所有子网ID:
database_subnets_ids = [for subnet in values(module.networking.database_subnets_properties) : subnet.id]
values()函数会把database_subnets_properties这个map转换为包含所有子网属性的列表,再通过for表达式遍历每个元素,提取其中的id字段,自动生成完整的子网ID列表。
方式二:优化networking子模块的输出
如果希望调用更简洁,可以在networking子模块中新增一个直接输出子网ID列表的output块:
output "database_subnet_ids" { description = "List of all Database Subnet IDs" value = [for subnet in aws_subnet.database : subnet.id] }
之后在main.tf里就能直接引用这个输出:
database_subnets_ids = module.networking.database_subnet_ids
这种方式让子模块的输出更贴合实际使用场景,后续其他模块需要子网ID时也能直接复用。
内容的提问来源于stack exchange,提问作者Yaroslav Kovalevskyi
相关产品推荐
相关产品推荐

