Terraform模块下载判定规则及本地已存在仍重复下载问题咨询
问题原因
你当前使用的TF_DATA_DIR仅用于指定当前Terraform工作目录的专属数据存储路径,存储内容为当前项目的已下载模块、插件、状态锁等,不属于全局共享缓存。因此首次在新工作目录执行terraform init时,即使其他目录已下载过相同版本的模块,Terraform仍会从远程拉取,仅当当前TF_DATA_DIR路径下已存在模块文件时,后续执行init才会跳过下载,这就是你两次运行init表现不一致的原因。
解决方案
使用Terraform原生的全局模块缓存机制即可实现需求,无需修改模块引用配置:
- 配置全局模块缓存目录环境变量
export TF_MODULE_CACHE_DIR="/path/to/your/custom/module-cache"
你可以自行指定任意有读写权限的目录作为全局缓存路径,所有Terraform工作目录执行init时都会优先检查该目录下是否存在匹配版本的模块:
- 存在则直接将模块复制到你指定的
TF_DATA_DIR路径下,不会触发远程下载 - 不存在则从远程拉取,拉取完成后会同时存入全局缓存目录和当前
TF_DATA_DIR,后续所有项目使用同版本模块时都可以复用缓存
- 可选:本地已存在模块时强制跳过下载
如果你确定当前TF_DATA_DIR下已经存在完整的模块文件,可以在执行init时添加-get=false参数,完全跳过模块下载步骤:
terraform init -get=false
注意事项
- 你使用的Terraform 0.14.7版本原生支持
TF_MODULE_CACHE_DIR变量,无需升级版本 - 无需修改现有模块的
source配置,不需要切换为本地路径引用,原有远程模块声明可以保持不变 TF_MODULE_CACHE_DIR和你已配置的TF_DATA_DIR可以同时生效,互不冲突
内容的提问来源于stack exchange,提问作者Ian Fako
相关产品推荐
相关产品推荐

