能否用单个versions.tf文件管理多Terraform目录的版本?
Terraform 0.12.31 能否共用根目录 versions.tf 文件?
在Terraform 0.12.31版本中,无法实现通过根目录单个versions.tf供所有子目录共用,也不支持直接引用外部版本约束文件,原因如下:
- Terraform的每个子目录(如
s3、pinpoint)都是独立的工作目录,Terraform仅会加载当前工作目录下的配置文件,不会自动向上遍历读取父目录的配置。versions.tf中的terraform块是工作目录级别的核心配置,必须存在于当前工作目录的配置集合中才能生效。 - 如果子目录中缺少
versions.tf,执行terraform init时会出现错误提示,要求明确指定Terraform版本约束,或者允许使用任意版本,这既不符合版本管控的需求,也无法保证所有子目录使用统一的Terraform版本。
替代解决方案
为了简化版本维护,可以通过以下方式批量统一子目录的版本配置:
1. 脚本批量更新
编写shell脚本遍历所有子目录,自动生成或替换统一的versions.tf文件:
#!/bin/bash # 定义根目录和统一的版本配置内容 TERRAFORM_ROOT="./terraform" UNIFIED_VERSION_CONFIG='terraform { required_version = ">= 0.12.31" required_providers { aws = { source = "hashicorp/aws" version = ">= 3.0.0" } } }' # 遍历所有子目录并写入配置 for dir in "$TERRAFORM_ROOT"/*/; do echo "$UNIFIED_VERSION_CONFIG" > "${dir}versions.tf" echo "已更新目录: $dir" done
执行该脚本即可一次性完成所有子目录versions.tf的统一更新。
2. 升级至Terraform 0.13+(可选)
如果后续有版本升级计划,Terraform 0.13+虽然仍无法直接共享versions.tf,但可以通过模块封装公共配置、使用工作区组等方式简化版本管理,但本质上每个工作目录仍需包含自身的版本约束配置。
内容的提问来源于stack exchange,提问作者CKT
相关产品推荐
相关产品推荐

