You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform模块中替代lifecycle阻止terraform destroy的最优资源方案

问题描述

我有一个仅包含module的Terraform文件,希望禁止任何人执行terraform destroy操作。常规做法是在资源中添加包含prevent_destroy = true的lifecycle块,但module不支持lifecycle。我曾考虑修改模块内部加入可配置的lifecycle块,但该块仅接受字面量值而非变量。另一种方案是添加一个无实际功能的资源来承载lifecycle块,只要该资源设置了prevent_destroy = true就能阻止destroy命令。请问在Cloud Foundry提供商、Terraform 1.7.5版本下,哪种资源类型最经济,不会产生额外云成本或安全风险?

解决方案

最经济且无风险的选择是使用Terraform核心内置的**null_resource**:

  • 这是纯虚拟资源,不会与Cloud Foundry API交互,也不会在Cloud Foundry环境中创建任何实际资源,完全无额外云成本,也不存在安全风险。
  • 它仅存在于Terraform状态文件中,当执行terraform destroy时,Terraform会尝试销毁该资源,但由于设置了prevent_destroy = true,会直接报错并终止整个销毁流程,完美实现阻止销毁的需求。

示例代码:

resource "null_resource" "prevent_destroy" {
  lifecycle {
    prevent_destroy = true
  }
}

如果必须使用Cloud Foundry提供商的资源,可以选择cloudfoundry_user_provided_service_instance,创建一个空的用户提供服务实例。不过该资源会在Cloud Foundry中生成一个无实际功能的实例,虽然通常无成本,但相比null_resource多了云环境的资源创建操作,轻量化程度不如前者。

内容的提问来源于stack exchange,提问作者John Skiles Skinner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:11:00