最近,我用Cloudfront、S3和WAF测试并创建了一个UI。
我对Cloudfront模块做了一些更改,并对创建的WAF名称进行了硬编码,这样每次执行terraform apply时,它都将使用我创建的WAF。然后,我从代码中删除了WAF模块。
当我尝试做另一个terraform apply时,它说WAF将被摧毁。我认为这是因为我删除了WAF模块。
是否有一种方法可以执行terraform plan/apply并跳过破坏最近部署的WAF?
发布于 2018-12-03 09:55:24
terraform state rm some.resource.to.remove
Terraform状态管理实际上运行得很好,我在移动资源时最常使用它,例如,当我以前模块化一些由单独资源组成的东西时。在这种情况下,Terraform最初试图破坏旧资源并创建一个新资源,因此我使用:
terraform state mv aws_lb.my_lb module.some_module.aws_lb.my_lb
发布于 2018-12-03 02:35:52
您可以使用terraform -target=resource只更新特定资源及其依赖项。这可能很笨重,但应该允许您处理丢失的声明。
或者,您可以从.tfstate文件中删除资源。我不知道terraform是否可以这样做,如果资源有很多受抚养人,这可能是一个复杂的操作。
发布于 2022-02-04 13:01:12
为了防止您不想从代码和状态文件中删除资源,请将prevent_destroy属性添加到所有这些资源中的lifecycle块下。
见下面的例子:
variable "enable_prevent_destroy" {
description = "Boolean to decide whether to enable enable_prevent_destroy or not"
default = true
}
resource "aws_instance" "example" {
ami = data.aws_ami.ubuntu.id
instance_type = "t2.micro"
vpc_security_group_ids = [aws_security_group.sg_web.id]
tags = {
Name = "my-ec2"
}
lifecycle {
prevent_destroy = var.enable_prevent_destroy
}
}参考资料:Terraform \管理资源生命周期\\防止资源删除
注意:要使其工作,您将需要Terraformv0.14或更高版本。
https://stackoverflow.com/questions/53586359
复制相似问题