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

Terraform:如何从for_each资源集合提取属性及类型判定

Terraform资源集合数据提取问题解答

先看原配置示例:

resource "aws_instance" "web" {
  for_each = {for k,v in var.input_var: k => v if v.enabled}
  name          = each.key
  ami           = each.value.ami
  instance_type = each.value.instance_type
}

resource "aws_db_instance" "db" {
  for_each = var.another_map
  aws_instance_id = aws_instance.web[index(aws_instance.web[*].name, each.value.name)].id
}

问题1:aws_instance.web的类型是什么?

aws_instance.web是对象映射(Map of Objects)。因为你在for_each中使用了映射类型的表达式({for k,v in var.input_var: k => v if v.enabled}生成键值对集合),Terraform会为映射中的每个键创建对应的aws_instance对象,最终aws_instance.web就是以原表达式的键为索引、对应EC2实例对象为值的映射结构。

问题2:匹配元素并提取id属性的正确语法是什么?

根据你的配置特点,aws_instance.web中每个实例的name属性等于它在映射中的键(name = each.key),且name唯一,最简洁高效的写法是直接通过键访问:

aws_instance.web[each.value.name].id

如果后续name和映射键不再绑定,也可以通过for表达式构建一个以name为索引的新映射实现匹配:

{ for inst in aws_instance.web : inst.name => inst }[each.value.name].id

这个表达式会遍历所有EC2实例,生成name到实例对象的映射,再通过目标name取出对应实例的id。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:40:21