有没有办法重用 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 的基础,因此您在使用它之前确实需要了解这一点。
我是这个 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 的基础,因此您在使用它之前确实需要了解这一点。