Terraform根模块传变量至子模块报错:重复变量声明
解决Terraform根模块变量重复声明错误
错误原因
这个报错和子模块变量名无关,是根模块内部重复定义了同名变量:你在根目录的main.tf第7行已经声明了variable "vpc_cidr_block",又在根目录的variables.tf中再次声明了同一个变量,而Terraform要求单个模块内的变量名必须唯一,因此触发错误。
解决方案
清理根模块的重复变量声明
打开根目录的main.tf,找到所有直接写在main.tf里的variable定义语句(比如第7行的variable "vpc_cidr_block" {}),将这些变量声明全部移动到根目录的variables.tf文件中。确保根模块的所有变量只在variables.tf中声明一次,main.tf仅负责使用变量(比如传递给子模块、配置AWS资源),不要在main.tf里定义变量。确认子模块变量传递逻辑
你当前在根模块中向子模块传递变量的写法是正确的:module "myapp-subnet" { source = "./modules/subnet" subnet_cidr_block = var.subnet_cidr_block avail_zone = var.avail_zone env_prefix = var.env_prefix vpc_id = aws_vpc.myapp-vpc.id default_route_table = aws_vpc.myapp-vpc.default_route_table_id }子模块的变量名和根模块同名完全没问题,只要根模块内部没有重复声明,Terraform会正常从
terraform.tfvars读取根模块变量的值,再传递给子模块。验证修复效果
完成清理后,在根目录终端依次执行:terraform init terraform validate若
validate返回Success! The configuration is valid.,说明问题已解决。
内容的提问来源于stack exchange,提问作者codestein
相关产品推荐
相关产品推荐

