Terraform for_each循环中.与[]访问属性的区别及正确用法
Terraform中
.与[]访问属性的差异及使用规范 核心差异
两种写法在访问符合标识符规则的属性时,返回结果完全一致,区别仅在于适用场景:
- 点访问(
.):只能访问键名符合Terraform标识符规则的属性。标识符规则要求键名仅由字母、数字、下划线组成,且不能以数字开头,不能包含特殊字符、空格。如果键名不符合该规则,点访问会直接抛出语法错误。 - 索引访问(
[""]):无键名格式限制,无论键名包含特殊字符、空格、以数字开头,都可以正常访问。同时支持动态传入键名,例如你可以通过变量指定要访问的键:each.value[var.target_key],这种动态取值能力是点访问不具备的。
推荐用法
- 当访问的属性键符合标识符规则时,优先使用点访问写法,代码更简洁易读,是Terraform社区通用的编码规范,你示例中的
each.value.name就是更推荐的写法。 - 只有遇到以下两种场景时,再使用索引访问写法:
- 属性键名不符合标识符规则,例如你Tags中如果存在
created-by这类带横杠的键,只能写each.value.tags["created-by"] - 需要动态指定要访问的属性键
- 属性键名不符合标识符规则,例如你Tags中如果存在
内容的提问来源于stack exchange,提问作者vivek mishra
相关产品推荐
相关产品推荐

