我应该在 运行 terraform init 之前删除 terraform lock 文件吗

Shall I remove terraform lock file before running terraform init

我正在写一篇关于 TF 提供程序迁移的小博客 post,其中包括以下命令:

terraform state replace-provider foo/bar foo2/bar2

# Updating TF configuration file

terraform init

我要告诉用户 运行

rm -rf .terraform/                          
rm .terraform.lock.hcl

在运行宁

之前
terraform init

terraform state replace-provider 命令需要一个已初始化的后端,因此除非 terraform init 首先是 运行,否则它不会工作。

.terraform 目录包含一些 Terraform 通常应该能够在需要时重现的临时工作目录状态,但删除它确实意味着任何没有确切版本约束的模块依赖项可能 select 再次安装不同版本时,command-line-specified 后端配置参数将丢失,并且 currently-selected 工作区将重置为默认值。

因此,我不建议随便建议用户删除该目录,除非您能够解释这样做的潜在后果。


.terraform.lock.hclthe dependency lock file 并且应该被视为配置的一部分,即使 terraform init 自动更新它,因为它的目的是在 运行 之间记住select编辑了每个提供程序的哪个版本。该文件在创建后通常应受版本控制。

除了为每个提供程序保存哪个版本的记录 selected 之外,依赖项锁定文件还通过保存提供程序的校验和为 Terraform 提供程序提供“首次使用信任”方法,以便如果您采取任何步骤来验证您安装的提供程序是否值得信赖,那么您可以确定 Terraform 将不允许任何具有不同校验和的包,除非您特别选择使用 terraform init -upgrade.

进行升级

在那种情况下,删除 .terraform.lock.hcl 会通过删除原始校验和的记录来破坏该机制,这意味着无法保证 terraform init 会安装与以前相同的软件包。