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

关于Terraform Provider继承文档的困惑与实操疑问

关于Terraform Provider传递与文档描述不符的疑问

模块结构

root
    > child a
        > child b
        > child c
        > child d

此前配置情况

所有模块的资源都部署在AWS同一区域(如eu-west-1),根模块中配置了单个默认AWS Provider:

provider "aws" {
  region = var.region
}

所有资源都正常部署在正确区域,子模块和孙模块均隐式继承了根模块的默认Provider,这符合文档描述。

当前变更与配置

现在child d模块需要在us-east-1区域创建资源,因此在根模块中添加了带别名的第二个Provider:

provider "aws" {
  alias  = "us_east_1"
  region = "us-east-1"
}

随后将该别名Provider传递给child a模块,再由child a传递给child d:

# root模块中
module "child-a" {
  source = "../child-a"
  providers = {
    aws.us_east_1 = aws.us_east_1
  }
}

# child a模块中
module "child-d" {
  source = "../child-d"
  providers = {
    aws.us_east_1 = aws.us_east_1
  }
}

# child d模块中
required_providers { 
   aws = { 
     source = "hashicorp/aws" version = ">= 4.16" 
     configuration_aliases = [aws.us_east_1] 
   } 
} 

注意:仅传递了别名Provider,且只有child d的资源需要它,其他子模块无需使用。

实际结果与疑问

实际运行后,除child d外所有资源仍使用根模块的默认Provider,但Terraform文档中有如下描述:

一旦在模块块中使用providers参数,将覆盖所有默认继承行为,因此必须枚举所有所需Provider的映射。这是为了避免混合隐式和显式Provider传递导致的混淆和意外。

请问:

  • 是文档存在错误吗?
  • 仅显式传递别名Provider时,是否仍会隐式继承根模块的默认Provider?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 15:52:40