我是这个地形世界的新手,我已经被分配去创建许多配置以使其蔚蓝的任务。
我正在开发一个main.tf
脚本(它会创建一些资源,例如资源组,vnet,kubernetes集群,应用程序服务等),并在对其进行编码和执行时
Terraform apply
,它似乎只能应用实际上所做的更改。
然后,我们删除了脚本创建的资源组,我的一个同事必须使用terraform运行相同的脚本,以创建具有其他名称的资源组,因为我没有必需的权限,此后,如果运行命令Terraform apply
失败并给出错误,表示无法创建资源,因为该资源已经存在。
阅读一些文档后,我发现可能是由于状态 https://www.terraform.io/docs/state/index.html
脚本的更新是否仅适用于每次Terraform会话?
即使执行Terraform refresh
似乎也不起作用。
也许我只是误会了,无法更新一些资源。
编辑:由于某种原因,存储中的状态文件只有几样东西,解决方案是删除所有内容并重新创建。
答案 0 :(得分:1)
对于新资源,仅此而已,Terraform脚本可帮助您创建在脚本中设置的资源。
对于现有资源,当您在已经通过Terraform部署的脚本中进行更改时,它将检查状态文件以确保资源应更新哪些更改。如果没有,或者您删除了Sate文件,那么它将直接部署Terraform脚本,但是如果您要部署的任何资源已经存在,则由于现有资源,它将失败。并且命令terraform refresh
仅更新已部署的Terraform脚本中资源的最后状态。如果部署失败并且状态文件中没有资源,则刷新无用。
答案 1 :(得分:1)
如果其他人因为您没有访问权限而为您运行terraform apply
,现在您想修改该Terraform并自己运行它,则需要获取该其他人运行时生成的状态文件它。您绝对必须在某个位置维护Terraform状态文件,以便在以后的运行中可以对其进行访问。您应该真正配置Terraform backend,而不是使用本地状态文件。
您需要知道Terraform将其所做的一切存储在状态文件中,并在每次运行之前引用该文件。 terraform refresh
仅告诉Terraform刷新状态文件中内容的状态,而不是从头开始重建状态文件。了解Terraform状态文件对于使用Terraform至关重要,因此您在使用它之前确实需要了解这一点。