删除“.terraform”文件夹的副作用

Side effects of removing ".terraform" folder

根据文档,.terraform 文件夹包含提供商插件的缓存。

如果删除此文件夹(但保留状态文件),是否会在 terraform init 重新创建? 删除 .terraform 可能产生哪些不良影响?

如果您删除了 .terraform 文件夹,您是正确的,提供商已被删除,但您需要备份状态文件,因为我曾多次看到该文件有时会被删除或损坏。

terraform init 确实会恢复 .terraform 文件夹。

为什么需要这样做?正如您可以 运行 terraform init -reconfigure 那样,这是一个更安全的选择。

删除.terraform目录是完全安全的。 提供程序的目录 (./modules) 和二进制文件 (./providers)

./
./modules           --> contains the code of used modules
./providers         --> contains the binaries of the providers
./terraform.tfstate --> the state file

根据 Jason 的回答,删除 terraform.tfstate 文件的结果取决于您是否使用后端。

如果您使用 backend(这是保存状态文件的推荐方式),下一个 terraform init 将创建一个指向状态文件的文件。

.terraform 目录包含几种不同类型的工件,其中一些跟踪仅与您当前工作目录相关的本地设置,而其他则是来自其他地方的数据缓存。

广义上讲 terraform init 可以在 .terraform 目录中重新创建 大部分 东西,但有一些小例外需要注意:

  • 除非您的 Terraform 配置仅包含本地模块或对远程模块有确切的版本限制,terraform init 不一定 select 每个外部模块的相同版本,如果上游的可用版本有变了。 .terraform/modules/modules.json 文件(在当前 Terraform 版本中)跟踪当前工作目录中的特定 selection。
  • 如果您使用 terraform workspace select select 编辑了一个非默认 workspace,删除 .terraform 目录将重置回默认工作空间,因为 Terraform 使用.terraform 下的文件以跟踪您当前的 selection.
  • 如果您在使用 terraform init 时使用了 -backend-config 选项,则删除 .terraform 将丢弃这些自定义设置,并且您需要在 运行 terraform init 再一次。

.terraform 中的其他主要人工制品 Terraform 轨迹源自 .terraform 之外的信息,因此可重现:

  • 如果您使用-backend-config,那么您的后端配置将存在于您配置的backend块中,因此 Terraform 将能够只要您没有更改配置,就完全重现它。
  • .terraform/providers 中的本地提供程序缓存由 the dependency lock file 索引,它是在 .terraform 旁边生成的而不是在 .terraform 内部生成的,因此它可以保存在版本控制中并在工作之间共享目录。 terraform init 默认情况下,将安装与该文件中记录的完全相同的依赖项。

以上内容适用于 Terraform v1.0 和 v1.1。 .terraform 的确切内容和布局是 Terraform 的一个实现细节,因此旧版本对它的处理方式不同,新版本可能不一定完全遵循我上面描述的内容。