You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform:如何传递多值输出并映射至另一模块变量

解决方案

1. 修正安全组模块的输出

每个ec2_sg模块实例仅创建一个安全组,原输出使用aws_security_group.sg.*.id会返回列表格式,需改为单个ID输出:

output "sg_id" {
  value = aws_security_group.sg.id
}

2. 调整EC2模块的资源映射逻辑

推荐使用与安全组模块一致的for_each来实现一一映射,逻辑更清晰且避免索引错位问题:

module "sg" {
  for_each = toset(var.Name)
  source   = "./modules/ec2_sg"
  App_Name = each.value
}

module "ec2" {
  for_each = toset(var.Name)
  source   = "./modules/ec2"

  Name      = each.value
  EC2_SG_ID = module.sg[each.value].sg_id
}

如果坚持使用count(需确保var.Name列表元素唯一),可通过列表索引匹配对应的安全组:

module "sg" {
  for_each = toset(var.Name)
  source   = "./modules/ec2_sg"
  App_Name = each.value
}

module "ec2" {
  count = length(var.Name)
  source = "./modules/ec2"

  Name      = var.Name[count.index]
  EC2_SG_ID = module.sg[var.Name[count.index]].sg_id
}

逻辑说明

  • 安全组模块通过for_each = toset(var.Name)创建实例后,module.sg会成为以var.Name元素为键的映射集合,每个键对应一个安全组模块实例。
  • EC2模块使用相同的for_each或通过列表索引匹配键值,直接获取对应安全组的ID,实现安全组与EC2实例的一一绑定。

内容的提问来源于stack exchange,提问作者Nijo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 14:40:03