什么时候使用地形刷新?

When is terraform refresh used?

我目前正在学习 terraform,我遇到了命令 terraform refresh。似乎它将 terraform.tfstate 文件同步到我手动所做的更改(我尝试更改 EC2 实例类型)。我发现 terraform plan 可以识别当前状态和期望状态之间的漂移 而无需 更新 tfstate 文件。此外,运行 terraform apply 会自动更新 tfstate 文件。

所以我在想,如果在 terraform plan 期间检测到任何漂移,我将只更新 terraform 代码以解决它们并让 terraform apply 更新 tfstate 文件。有什么理由独立使用terraform refresh吗?

P.S。 我正在使用 terraform v0.15.0

你是对的,terraform refresh 用于更新你的 terraform 状态文件以匹配当前状态——如果资源是在 terraform 之外编辑的,这可能会发生变化。

terraform refresh itself is deprecated,请注意在某些情况下它可能不安全。该文档建议使用 terraform apply -refresh-only 作为替代方法,因为它会提示用户在更改被保留之前确认更改。

关于你“什么时候用的?”的问题。根据我的经验,主要使用 terraform 进行 AWS 部署,我们实际上几乎从未 运行 刷新操作。作为 terraform plan / terraform apply 循环的一部分,Terraform 会自动检查当前状态。这可能特定于 AWS 提供商,也可能不特定。

我认为刷新状态很重要的一个场景是当状态文件通过 data remote_state_data 块用作数据源时。具体来说,如果您有意修改了资源并且不能(或尚未)更新 terraform 标记以反映更改。在那种情况下,其他 Terraform 模块正在从您的状态文件中读取值(而不是从资源本身读取值)——如果您的资源和状态文件不同步,那么状态文件的消费者将收到不准确的数据。

然而,在大多数情况下,您希望您的资源与其 terraform 表示相匹配——因此您会 terraform apply 使资源和状态重新与您的 terraform 模块保持一致。