有没有办法重用 terraform 脚本并对其进行更改?

Is there a way to reuse a terraform script and make changes to it?

我是这个 terraform 世界的新手,我被分配到创建许多配置以使用它的任务。

我正在开发一个 main.tf 脚本(它创建一些资源,如资源组、vnet、kubernetes 集群、应用程序服务等),同时对其进行编码和执行 Terraform apply,它似乎只适用于实际更新中所做的更改。

然后我们删除了脚本创建的资源组,我的一个同事不得不 运行 使用 terraform 的相同脚本创建一个具有另一个名称的资源组,因为我没有所需的权限,之后,如果我 运行 命令 Terraform apply 它失败并给出错误,即无法创建资源,因为它已经存在。

在阅读了一些文档后,我发现这可能是因为状态 https://www.terraform.io/docs/state/index.html

脚本的更新是否仅适用于每个 terraform 会话?

即使 Terraform refresh 似乎也行不通。 或者可能我只是误会了,无法更新某些资源。

编辑:由于某种原因,存储中的状态文件只有几样东西,解决方案是删除所有内容并重新创建。

对于新的资源,仅此而已,Terraform脚本帮你创建你在脚本中设置的资源。

对于现有资源,当您对已通过 Terraform 部署的脚本进行更改时,它将检查状态文件以确保资源应更新哪些更改。如果没有状态文件(或者你删除了它),那么它会直接部署 Terraform 脚本,但是如果你要部署的资源已经存在,那么它会因为现有资源而失败。命令 terraform refresh 只是更新您已部署的 Terraform 脚本中资源的最后状态。如果部署失败并且状态文件中没有资源,那么 refresh 没有用。

如果其他人 运行 terraform apply 因为您没有访问权限而为您提供帮助,而现在您想要修改该 terraform 并 运行 自己,您需要获得其他人 运行 时生成的状态文件。您绝对必须在某处维护 Terraform 状态文件,以便可以在后续 运行 上访问它。你真的应该配置一个 Terraform backend,而不是使用本地状态文件。

您需要注意 Terraform 将它所做的一切存储在状态文件中,并在每个 运行 之前引用该文件。 terraform refresh 只告诉 Terraform 刷新状态文件中事物的状态,它不会从头开始重建状态文件。了解 Terraform 状态文件是使用 Terraform 的基础,因此您在使用它之前确实需要了解这一点。