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

Terraform locals作用域是否覆盖子模块?澄清根模块局部值可见误解

Terraform 根模块Local值能否被子模块访问?

Terraform的局部值(locals)作用域严格限定在其声明的模块内,根模块的local值无法直接在子模块内部访问,你遇到的是对代码上下文的误解。

HashiCorp官方文档明确说明:

局部值仅能在其声明所在模块的表达式中访问

分析你的代码示例

你提供的代码里,local.a和local.b是在根模块的module "child"调用块中使用的,这个调用块属于根模块的配置上下文,完全符合局部值的作用域规则——根模块的local自然能在根模块内部的任何表达式里使用,包括模块调用的参数(比如for_each)。

而你的子模块./child的代码(some.tf)中,根本没有尝试访问根模块的local.a或local.b,子模块的资源配置完全独立,没有引用父模块的局部值。你之前误以为根模块的local在子模块可见,本质是混淆了「模块调用的上下文(父模块)」和「子模块内部的上下文」。

正确的跨模块传递方式

如果需要让子模块使用父模块的局部值,必须通过**子模块的输入变量(variable)**显式传递:

  1. 在子模块./child中定义变量:
variable "parent_a" {
  type = number
}
  1. 在根模块的调用块中传递值:
module "child" {
  source = "./child"
  parent_a = local.a
}

此时子模块才能通过var.parent_a访问到根模块的local.a。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:56:31