【问题标题】:Terraform - AWS - How to prevent EBS volumes from being deleted?Terraform - AWS - 如何防止 EBS 卷被删除?
【发布时间】:2018-05-06 01:07:02
【问题描述】:

我对 Terraform 还很陌生,所以我希望问题是我做错了什么。

我有一些实例需要附加单独的 EBS 卷。这些被定义为三个独立的 Terraform 资源:

aws_instance
aws_ebs_volume
aws_volume_attachment

当实例启动时,AWS 控制台中的卷会说它们具有“终止时删除”保护,但 Terraform 仍然会销毁它们:

如果您在 aws_instance 资源定义中使用“block_device”映射,则可以防止它被终止:

https://www.terraform.io/docs/providers/aws/r/instance.html#delete_on_termination-1

但是这个选项没有出现在 ebs_volume 资源中:

https://www.terraform.io/docs/providers/aws/r/ebs_volume.html

如何阻止 Terraform 删除我的 EBS 卷?

我试过这样做,但它只是停止运行 terraform destroy 作业:

  lifecycle = {
    prevent_destroy = true
  }

谢谢

【问题讨论】:

  • 请显示您的terraform plan ... 输出。
  • 嗨 - 你想要创建或销毁的计划还是两者兼而有之?无论如何,它们都是相当大的输出并包含大量业务数据(标签、名称标识符),因此我试图从中编辑所有业务可识别数据。请多多包涵。谢谢 如果您只想要特定部分,请告诉我。
  • 请显示 aws_instance 破坏计划输出。
  • 给你 -> pastebin.com/4B9nf4Bq 谢谢
  • 您是否将lifecycle 元参数放入aws_ebs_volume 资源块中?

标签: amazon-web-services volume terraform terminate amazon-ebs


【解决方案1】:

一般情况下,terraform destroy 会销毁所有资源。如果您希望只销毁特定资源,可以使用例如:terraform destroy -target=aws_instance.some_name

对于您的 EBS 卷示例,您还必须销毁 aws_volume_attachment 资源。

【讨论】:

    【解决方案2】:

    它完全按照文档所说的那样做,所以 Terraform 不允许terraform destroy,如果你需要它这样做,那么我建议将这些资源从其他资源移到它们自己的 terraform 目录中。

    prevent_destroy (bool) - 这个标志提供额外的保护 给定资源的破坏。当此设置为 true 时,任何 包含销毁此资源的计划将返回错误 消息。

    【讨论】:

      【解决方案3】:

      如果您想防止您的 ec2 实例被意外删除,您可以在您的创建 ec2 实例资源部分使用以下命令,

      disable_api_termination="true"

      我已经验证了几次它工作正常。

      学习愉快....!!

      【讨论】:

      • 您可以通过链接到文档来改进此答案。此外,我的快速研究表明,Terraform 中存在一些未解决的错误,这可能导致此参数无法按预期工作——这可能也应该得到解决。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-07
      • 2017-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多