有没有一种方法可以重用terraform脚本并对其进行更改?

时间:2020-10-21 22:04:16

标签: terraform terraform-provider-azure

我是这个地形世界的新手,我已经被分配去创建许多配置以使其蔚蓝的任务。

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

然后,我们删除了脚本创建的资源组,我的一个同事必须使用terraform运行相同的脚本,以创建具有其他名称的资源组,因为我没有必需的权限,此后,如果运行命令Terraform apply失败并给出错误,表示无法创建资源,因为该资源已经存在。

阅读一些文档后,我发现可能是由于状态 https://www.terraform.io/docs/state/index.html

脚本的更新是否仅适用于每次Terraform会话?

即使执行Terraform refresh似乎也不起作用。 也许我只是误会了,无法更新一些资源。

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

您需要知道Terraform将其所做的一切存储在状态文件中,并在每次运行之前引用该文件。 terraform refresh仅告诉Terraform刷新状态文件中内容的状态,而不是从头开始重建状态文件。了解Terraform状态文件对于使用Terraform至关重要,因此您在使用它之前确实需要了解这一点。