如何在Dev目录初始化Terraform并调用Common目录配置脚本
Terraform 0.15+ 多目录配置初始化解决方案
问题核心
Terraform 0.15+ 废弃了旧版本中直接指定配置目录作为terraform init最后参数的用法,改用-chdir指定工作目录,导致原目录结构下锁文件生成在Common目录,无法在Dev目录完成初始化。
可行解决方案
方法1:将Common作为模块引入Dev目录(推荐)
这是Terraform官方推荐的配置复用方式,同时确保工作目录为Dev,锁文件和状态文件都存放在Dev目录:
- 在Dev目录下创建
main.tf文件,内容如下:
# 引入Common目录的通用配置作为模块 module "common_infra" { source = "../common" # 传递Dev目录terraform.tfvars中的变量到Common模块 # 需确保Common目录variables.tf中定义的变量名与Dev目录的变量名一致,或在这里显式赋值 # 示例:如果Common定义了variable "region",则传递: # region = var.region }
- 进入Dev目录,执行初始化命令:
terraform init -backend-config=backend-config.conf
执行后,.terraform目录、.terraform.lock.hcl锁文件都会生成在Dev目录,同时正确加载Common目录的通用配置。
方法2:使用符号链接映射Common配置到Dev目录(适合快速兼容)
如果不想调整配置结构,可通过符号链接将Common目录的TF文件映射到Dev目录(注意:Windows系统需管理员权限创建符号链接):
- 进入Dev目录,执行命令创建符号链接:
- Linux/macOS:
ln -s ../common/*.tf ./- Windows(PowerShell):
Get-ChildItem ../common/*.tf | ForEach-Object { New-Item -ItemType SymbolicLink -Path $_.Name -Target $_.FullName } - 执行初始化命令:
terraform init -backend-config=backend-config.conf
此方法会将Common的TF文件链接到Dev目录,Terraform会将Dev作为工作目录,锁文件自然生成在Dev目录。
内容的提问来源于stack exchange,提问作者Waelalmerri
相关产品推荐
相关产品推荐

