Terraform是否跟踪模块版本?文档表述存疑求解
Terraform模块版本跟踪的矛盾点解析
Terraform不会通过依赖锁文件跟踪模块版本,但会借助本地缓存保留已安装的模块版本,这就是两处官方文档表述看似矛盾的核心原因,具体解析如下:
关于依赖锁文件的表述
目前,依赖锁文件仅跟踪provider依赖项。Terraform不记录远程模块的版本选择,因此Terraform始终会选择符合指定版本约束的最新可用模块版本。
这段描述针对无本地模块缓存的场景:
- 依赖锁文件(
.terraform.lock.hcl)仅存储provider的版本信息,不会记录模块的版本选择。 - 如果本地没有该模块的缓存(比如首次执行
terraform init,或手动删除了.terraform/modules目录),Terraform会根据配置中声明的版本约束,从远程仓库拉取最新的符合要求的模块版本。
关于terraform init不更改已安装模块的表述
在已安装模块的情况下重新运行init时,将安装自上次init以来添加到配置中的任何模块的源,但不会更改任何已安装的模块。
这段描述针对已有本地模块缓存的场景:
- 首次执行
terraform init时,Terraform会将下载的模块存储在本地的.terraform/modules目录(本地缓存)中。 - 后续再次执行
terraform init时,Terraform会优先复用本地缓存内已有的模块文件,不会主动去远程仓库拉取新版本。 - 若要强制更新模块版本,需要手动执行
terraform init -upgrade命令,或删除对应的本地模块缓存目录后重新执行init。
总结
两处文档表述并不矛盾,只是分别描述了Terraform在「无本地缓存」和「有本地缓存」两种场景下的模块版本处理逻辑:锁文件不记录模块版本导致无缓存时会拉取最新符合约束的版本,而本地缓存的存在则让已安装的模块得以保留,不会被自动替换。
内容的提问来源于stack exchange,提问作者user3579222
相关产品推荐
相关产品推荐

