📜  通过 terraform 创建资源,但如果手动删除则不重新创建? (1)

📅  最后修改于: 2023-12-03 14:58:02.714000             🧑  作者: Mango

通过 Terraform 创建资源,但如果手动删除则不重新创建
简介

Terraform 是一个开放源代码的基础架构自动化工具,可以通过 code-as-infrastructure 的方式去管理云、桌面以及物理服务器的资源。通常情况下,我们会将所有的资源创建、管理、更新、维护都交付给 Terraform 去处理。但有时候,我们手动删除了某些资源,如果 Terraform 再次执行 apply 操作,就会再次创建该资源,这显然是不希望看到的。本文将介绍如何通过 Terraform 创建资源,但如果手动删除则不重新创建。

方案

Terraform 提供了一个有用的属性 -- lifecycle,在 Terraform 中,一般用来控制资源的生命周期。lifecycle 可以配置不同的操作,在 destroy、create 等过程的不同时刻执行不同的操作。例如,在资源 destroy 时,我们不想 remove 掉这个资源,而是保留这个资源,那么就可以通过如下的配置:

resource "aws_instance" "web" {
  # ... other fields

  lifecycle {
    prevent_destroy = true
  }
}

通过这个配置,当我们手动删除这个资源后,再次执行 terraform apply 时,Terraform 会识别到该资源已被删除,不会再次创建这个资源,同时避免了因误删除或误操作导致资源再次创建。

除了 prevent_destroy 之外,lifecycle 还提供了很多其他的操作,例如 ignore_changes,可以在更新时忽略某些头痛的变更,不让 Terraform 自动更新。需要注意的是,有些情况下,使用 lifecycle 可能会引入更多的问题,比如当你升级了 Terraform 版本时,原先的 lifecycle 配置或许已经不再适用,因此在使用时需要慎重考虑。

总结

本文介绍了如何通过 Terraform 创建资源,但如果手动删除则不重新创建的方案。通过 lifecycle 的 prevent_destroy 属性,可以有效避免误删除或误操作导致资源再次创建的问题。需要注意的是,lifecycle 配置应当慎重考虑,在合适的情况下使用,避免因版本升级等原因而引入更多问题。