我有一个 Terraform 文件,我想阻止任何人在其上运行
terraform destroy
。
执行此操作的正常方法是将包含
lifecycle
的 prevent_destroy = true
块包含在文件中的一个或多个资源上。但是,我不能这样做。该文件仅包含 module
,不接受 lifecycle
。
我考虑修改模块本身以包含可以使用参数配置的
lifecycle
块。但这也不起作用,因为该块仅接受文字值,而不接受变量。
另一种替代方法是向接受
lifecycle
块的文件添加一个不执行任何操作的资源。我想这是什么资源并不重要?任何包含设置了 prevent_destroy
的块的资源都应该足以停止 destroy 命令。对吗?
那么,对于我来说除了持有这个区块之外什么也不做的最经济的资源类型是什么?理想情况下,不会产生额外的云提供商成本或安全风险。
提供商是Cloud Foundry。 Terraform 版本是 1.7.5。
我认为您可以使用此处的“无所事事”资源。
null_resource
:这就像一张空白记事卡,专为您只需要填充空间的情况而设计。
local_value
:尽管它的目的是定义本地值,但它也可以在紧要关头充当无用的资源。
添加资源和生命周期块:
在您的主 Terraform 文件(包含模块的文件)中,使用
prevent_destroy = true
: 添加您选择的资源和生命周期块
resource "null_resource" "prevent_destroy" {
lifecycle {
prevent_destroy = true
}
}
这段代码只是定义了一个名为
null_resource
的 prevent_destroy
并告诉 Terraform 在有人尝试运行 terraform destroy
时避免这种情况。
希望这有帮助!