Terraform 避免破坏以前创建的资源

Terraform 避免破坏以前创建的资源,terraform,Terraform,我想避免terraform破坏我之前创建的资源,而是创建新的资源 我正在/想要这样使用地形: 创建AWS IAM组和策略 已将用户附加到这些组 我想通过提供外部var文件来创建新的组和用户,就像我为上述用户和组所做的那样 但是当我试图传递新的var文件时,我创建了新的资源并删除了以前的资源,所以我想创建新的资源,但仍然想保留旧的资源,直到我提到我想删除它为止 这对我来说真的很困惑,有人能告诉我怎么才能做到吗 提前谢谢我认为地形不会那样工作。地形的主要特征之一如下 基础架构代码:基础架构使用高

我想避免terraform破坏我之前创建的资源,而是创建新的资源

我正在/想要这样使用地形:

  • 创建AWS IAM组和策略
  • 已将用户附加到这些组
  • 我想通过提供外部var文件来创建新的组和用户,就像我为上述用户和组所做的那样
但是当我试图传递新的var文件时,我创建了新的资源并删除了以前的资源,所以我想创建新的资源,但仍然想保留旧的资源,直到我提到我想删除它为止

这对我来说真的很困惑,有人能告诉我怎么才能做到吗


提前谢谢

我认为地形不会那样工作。地形的主要特征之一如下

基础架构代码:基础架构使用高级配置语法进行描述。这允许对数据中心的蓝图进行版本控制,并将其视为任何其他代码。此外,基础设施可以共享和重复使用

如果您开始从单个地形资源中存在多个“实际”资源,那么您已经失去了基础设施的定义性质。这是地形资源吗。。。一个实际的资源?五个?十个?你看了代码就没法分辨了


回到你的问题,我认为你有一些选择,但最终还是会回到具体定义资源上来。您最好的选择,特别是如果您想减少样板文件,可能是。

您可能想看看Terraform模块-

然后,您可以通过“实例化”一个模块来创建一组资源,然后再次这样做来创建另一组资源

很棘手,所以要小心。我成功地销毁了其他资源,同时保留了一些资源

用法:地形状态rm[选项]地址

该命令将删除与给定地址匹配的所有项

从地形状态移除的物品不会被物理破坏。从Terraform状态删除的项目不再由Terraform管理。例如,如果从状态中删除AWS实例,AWS实例将继续运行,但terraform plan将不再看到该实例

从地形状态文件中删除项目有各种用例。最常见的是重构配置,不再管理该资源(可能将其移动到另一个Terraform配置/状态)

只有成功删除所有地址后,才会保存状态。如果由于任何原因(如语法错误)导致任何特定地址错误,则将根本不修改状态

此命令将在保存任何更改之前输出状态的备份副本。无法禁用备份。由于此命令具有破坏性,因此需要备份

terraform state rm resource\u to\u stay


terraform plan-销毁
,可以通过执行
terraformstate rm'resourcetype.resourcename'格式

我不得不删除Terraform之前创建的Route53条目,但现在我们想删除它,因为如果当前状态不匹配,Terraform会销毁它

因此,
地形状态rm'aws\u route53\u record.nameofMyRoute53 record'
更新了S3位置的状态文件 下一次,当我们触发terraform脚本来计划/销毁和应用R53条目时,由于terraform没有意识到这一点,所以它没有被触动


详细用法可在

上找到。如果你举例说明你迄今为止所做的工作,回答这个问题可能会更容易。这也是我得出的结论。换一种说法——假设您希望在项目结束时保存S3存储桶,避免其被销毁,然后为存储桶创建一个terraform配置,为infra的其余部分创建另一个配置。