Terraform无法识别根模块中声明的变量,请求技术协助
解决Terraform模块变量未声明错误的方案
你的核心误解是根模块的变量不能直接被子模块调用,Terraform中每个模块的变量作用域都是独立的,子模块必须自己声明所需变量,再通过根模块的调用传递值。以下是具体解决步骤:
1. 子模块声明自身所需变量
在子模块DMS_deploy_module目录下创建variables.tf,声明该模块需要用到的所有变量(变量定义可以和根模块的保持一致,比如类型、描述、默认值等)。
示例子模块variables.tf片段:
variable "aws_region" { type = string description = "AWS区域,用于部署DMS资源" } variable "dms_replication_instance_class" { type = string description = "DMS复制实例的规格" default = "dms.t2.micro" } # 其余13个变量依次声明
2. 根模块调用子模块时传递变量值
在根模块(DMS_module目录)的配置文件(比如main.tf)中,调用子模块时通过参数传递根模块变量的值:
示例根模块调用代码:
module "dms_deploy" { source = "./DMS_deploy_module" # 子模块的相对路径 # 将根模块变量传递给子模块对应变量 aws_region = var.aws_region dms_replication_instance_class = var.dms_replication_instance_class # 其余13个变量一一对应传递 }
3. 正确执行Terraform命令
确保在**根模块目录(DMS_module)**下执行terraform init和terraform plan,不要直接在子模块目录运行命令——子模块目录下没有根模块的变量定义,单独运行会触发变量未声明错误。
内容的提问来源于stack exchange,提问作者udhayan dharmalingam
相关产品推荐
相关产品推荐

