关于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
相关产品推荐
相关产品推荐

