首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我怎么能跳过破坏Terraform的资源呢?

我怎么能跳过破坏Terraform的资源呢?
EN

Stack Overflow用户
提问于 2018-12-03 01:34:27
回答 3查看 10.7K关注 0票数 5

最近,我用Cloudfront、S3和WAF测试并创建了一个UI。

我对Cloudfront模块做了一些更改,并对创建的WAF名称进行了硬编码,这样每次执行terraform apply时,它都将使用我创建的WAF。然后,我从代码中删除了WAF模块。

当我尝试做另一个terraform apply时,它说WAF将被摧毁。我认为这是因为我删除了WAF模块。

是否有一种方法可以执行terraform plan/apply并跳过破坏最近部署的WAF?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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

票数 15
EN

Stack Overflow用户

发布于 2018-12-03 02:35:52

您可以使用terraform -target=resource只更新特定资源及其依赖项。这可能很笨重,但应该允许您处理丢失的声明。

或者,您可以从.tfstate文件中删除资源。我不知道terraform是否可以这样做,如果资源有很多受抚养人,这可能是一个复杂的操作。

票数 2
EN

Stack Overflow用户

发布于 2022-02-04 13:01:12

为了防止您不想从代码和状态文件中删除资源,请将prevent_destroy属性添加到所有这些资源中的lifecycle块下。

见下面的例子:

代码语言:javascript
复制
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或更高版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53586359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档