如何告诉地形不要有条件地破坏现有资源

How to tell the terraform not to destroy the existing resource conditinally

如何告诉 terraform 不要在条件下破坏现有资源

你好,我有一个控制资源创建的 terraform 变量

variable "apigw_key" {
  type    = string
  default = "X"
}

当我运行 terraform apply 它适当地创建资源

resource "aws_api_gateway_resource" "whitelist-create" {
  parent_id   = "u8u7hy"
  path_part   = "create"
  rest_api_id = "9uumm7"
  count       = var.apigw_key == "X" ? 1 : 0
}

resource "aws_api_gateway_resource" "account-delete" {
  parent_id   = "fgty72"
  path_part   = "delete"
  rest_api_id = "9uumm7"
  count       = var.apigw_key == "Y" ? 1 : 0
}

当 terraform apply 为 运行

时,输出似乎是完美的

地形应用-var="apigw_key=X"

Plan: 1 to add, 0 to change, 0 to destroy.

当我 运行 Y 上的 terraform 计划 X 资源显示在计划中被破坏

variable "apigw_key" {
  type    = string
  default = "Y"
}

terraform plan -var="apigw_key=Y"

Plan: 1 to add, 0 to change, 1 to destroy.

如何控制现有资源不被破坏

根据 Marko 反馈

编辑
variable "X" {
  type    = bool
  default = false
}
variable "Y" {
  type    = bool
  default = false
}

这是我更新的资源配置

resource "aws_api_gateway_resource" "whitelist-create" {
  parent_id   = "u8u7hy"
  path_part   = "create"
  rest_api_id = "9uumm7"
  count       = var.Y ? 1 : 0
}

resource "aws_api_gateway_resource" "account-delete" {
  parent_id   = "fgty72"
  path_part   = "delete"
  rest_api_id = "9uumm7"
  count       = var.X ? 1 : 0
}

地形应用-var X=true

aws_api_gateway_resource.account-删除 将创建并维护状态文件

当我执行以下操作时 terraform apply -var Y=true 它将创建一个资源并删除一个

我的问题是如何防止现有资源不被删除?

通常,您所描述的行为是合乎需要的 - 如果您的配置不创建资源,则您不希望该资源存在。但是,在某些情况下,可能存在记录保存或折旧要求,以防止您在不需要时立即删除它。

如果您想有条件地创建资源,但在条件改变时不删除它,请使用 prevent_destroy 生命周期参数:

resource "aws_api_gateway_resource" "whitelist-create" {
    parent_id   = "u8u7hy"
    path_part   = "create"
    rest_api_id = "9uumm7"
    count       = var.Y ? 1 : 0
    lifecycle {
        prevent_destroy = true
    }
}