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

Terraform 有没有办法重用地形脚本并对其进行更改?,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,我是这个地形世界的新手,我被分配到了用它为azure创建许多配置的任务中 我正在开发一个main.tf脚本(它创建一些资源,比如资源组、VNET、kubernetes集群、应用程序服务等),同时对其进行编码和执行 terraformapply,它似乎只应用更改的内容,实际上是更新 然后我们删除了脚本创建的资源组,我的一个同事不得不用terraform运行相同的脚本创建另一个名称的资源组,因为我没有所需的权限,之后,如果我运行命令terraform apply,它会失败并给出错误,也就是说,无法创

我是这个地形世界的新手,我被分配到了用它为azure创建许多配置的任务中

我正在开发一个
main.tf
脚本(它创建一些资源,比如资源组、VNET、kubernetes集群、应用程序服务等),同时对其进行编码和执行
terraformapply
,它似乎只应用更改的内容,实际上是更新

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

在阅读了一些文档之后,我发现这可能是因为状态

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

即使进行
Terraform刷新
也似乎不起作用。 或者可能我只是弄错了,没有办法更新一些资源


编辑:由于某些原因,存储上的状态文件只有一些内容,解决方案是删除所有内容并重新创建。

对于新资源,没有其他内容,Terraform脚本帮助您创建在脚本中设置的资源


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

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


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

您是否试图更改现有资源?您是否手动更改了使用Terraform部署的资源?您说,“我们删除了脚本创建的资源组。”您是使用
terraform destroy
还是使用portal/CLI/etc删除它的?另外,您能提供您收到的确切错误消息吗?@YannStoneman在Azure中删除了包含所有内容的资源,但随后我们创建了另一个具有不同名称的资源组。这意味着如果其他人部署了该脚本,然后我尝试部署同一脚本并进行了一些更改,由于我没有初始状态,因此无法进行更新?@Nmaster88您可以将Terraform脚本中的所有资源导入到状态文件中。然后您可以更新它们。这很有意义,我现在找到了一些关于团队环境的远程状态的文章。@Nmaster88好的,如果对您有帮助,请接受它。好的。检查州政府的文件,它只有一些东西,这就是问题所在,我不知道为什么会这样。