如何告诉地形不要有条件地破坏现有资源
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
}
}
如何告诉 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
}
}