【问题标题】:Exlude resources from the destroy process in terraform configuration在 terraform 配置中从销毁进程中排除资源
【发布时间】:2020-03-27 07:47:33
【问题描述】:

我目前正在开发完全由 Terraform 管理的环境,但我遇到了一些限制,我想知道是否有功能或解决方法可以做我想做的事情:

我有一个这样描述的环境:

  • 具有公有和私有子网的 VPC
  • 具有一些工作人员的 EKS 集群
  • 一些 kubernetes 配置(使用 kubernetes 提供程序)
  • 一些 helm 配置(使用 helm 提供程序)

一切正常,但是当我想通过运行terraform destroy 进行全面清理时,我必须使用-target 选项一个一个地销毁一些资源,然后手动删除状态文件中的一些引用。

我想这样做的两个原因:

  1. 只是因为失败了

    不知道为什么,但我无法使用 Terraform 和手动销毁一些子网(无法分离互联网网关),但我能够通过简单地销毁 VPC 来销毁它们。

    在这种情况下,我想告诉 Terraform 只删除 VPC,这样做,AWS 会自动销毁相关组件,例如子网、Internet 网关、路由表、网络 ACL 等。

  2. 因为这样会更快

    我正在使用带有 Kubernetes(和 Helm)提供程序的 Terraform 来定义我的 Kubernetes 配置,但是当我运行 terraform destroy 时,它将删除所有 Kubernetes 资源,然后是集群(和工作人员)。

    只删除集群会更快。


所以这是我的问题: 是否可以在 Terraform 配置文件中将资源排除到销毁过程中?

【问题讨论】:

    标签: kubernetes terraform


    【解决方案1】:

    这允许您创建一个计划来销毁除模块“module.exclude.me”之外的所有资源

    terraform plan -destroy $(for r in `terraform state list | fgrep -v module.exclude.me` ; do printf " -target ${r} "; done) -out destroy.plan
    

    学分从相应的 github 问题转到 cmacrae:https://github.com/hashicorp/terraform/issues/2253

    【讨论】:

      【解决方案2】:

      实际上没有办法做我想做的事,但文档说:

      与其使用 -target 作为对大型配置的孤立部分进行操作的方法,不如将大型配置分解为几个可以独立应用的较小配置。数据源可用于访问有关在其他配置中创建的资源的信息,从而允许将复杂的系统架构分解为可独立更新的更易于管理的部分。

      如果我们使用标准模式(一种配置用于 VPC,一种用于集群和工作器,一种用于 Kubernetes 配置),这将不适合某些用例,因为销毁 VPC 仍然会在销毁 VPC 之前销毁所有组件VPC(并将导致失败)。


      这是一个可能的解决方法,目标是创建两个配置:

      • 主要配置:包含所有需要销毁的组件
        • 例如:VPC、集群、RDS、DynamoDB
      • 子配置:包含将通过销毁主要组件来销毁的所有组件(提供方)
        • 例如:Kubernetes 配置、子网、互联网网关等

      使用这种模式,我们可以使用销毁命令创建一个简单的 CLI:

      1. 主配置中运行命令terraform destroy
      2. 当第一步成功完成后,移除子配置的状态

      我在 Terraform github 存储库上提出了一个问题,以提出一个增强功能,一个允许插件与带注释的资源交互并监听不同事件(创建、销毁、状态刷新等)的注释系统

      如果您遇到同样的情况,请查看问题,添加 +1 并评论您的意见!

      https://github.com/hashicorp/terraform/issues/23547

      【讨论】:

        【解决方案3】:

        我还看到 terraform 在破坏资源时出现故障,需要人工干预。 recommended way 似乎是将所需资源模块化为单独的配置,然后根据需要计划/销毁它们。在您的情况下,为 EKS 配置说一个单独的 eks.tf。

        【讨论】:

          猜你喜欢
          • 2020-12-27
          • 2022-07-13
          • 2019-11-14
          • 2020-10-24
          • 1970-01-01
          • 2021-02-15
          • 2019-04-11
          • 2019-10-25
          • 1970-01-01
          相关资源
          最近更新 更多