我对Terraform相当陌生,所以我希望这个问题是我做错了。
我有一些需要附加单独EBS卷的实例。这些被定义为三个独立的Terraform资源:
aws_instance
aws_ebs_volume
aws_volume_attachment
当实例启动时,在AWS控制台中,卷表示他们在终止时已删除'保护,但Terraform仍在摧毁它们:
如果您使用' block_device'在aws_instance资源定义中进行映射可以防止它被终止:
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
}
由于
答案 0 :(得分:1)
它完全按照文档所说的那样做,所以Terraform不会允许terraform destroy
,如果你需要它,那么我建议将这些资源移到他们自己的terraform目录远离其他资源。
prevent_destroy(bool) - 此标志提供额外保护 破坏给定的资源。当此设置为true时,任何 包含此资源销毁的计划将返回错误 消息。强>
答案 1 :(得分:0)
通常,terraform destroy
会破坏所有资源。如果您只想销毁特定资源,可以使用例如:terraform destroy -target=aws_instance.some_name
对于您的EBS卷示例,您还必须销毁aws_volume_attachment
资源。
答案 2 :(得分:0)
如果您想阻止ec2实例被意外删除,可以在create ec2 instance resource部分使用以下命令,
disable_api_termination =“true”
我已经验证了几次工作正常。
快乐学习...... !!