Terraform – Meta参数lifecycle的使用
ignore_changes
一般上如果我们使用terraform创建了AWS的EC2之后,如果我们在console当中对于这个EC2手动更改tag的话,之后再次执行terraform, 那么terraform就会把我们手动更改的tag给删除。所以可以使用ignore_changes来忽略tags的检查,当然我们也能在ignore_changes当中添加其他我们想要ignore的东西比如user_data
create_before_destroy
在替换资源时,先创建新实例,再销毁旧实例,确保服务不中断,如果不使用这个设定的话,那么terraform默认都是会删掉资源,然后再创建的。
prevent_destroy
在 Terraform 中,使用 prevent_destroy 可以防止重要资源被误操作删除,比如数据库或是重要的资源。只有在资源当中的lifecycle加入了prevent_destroy,那么当执行terraform destroy的时候就会报错,报错信息如下。如果你错把整个资源从tf文件删除的话,那么就无法收到prevent_destroy的保护,系统读到了你删掉的部分资源,误以为是不需要的,那么terraform系统还是一样会删掉资源的。

使用案例:
provider "aws" {
region = "ap-southeast-1"
}
resource "aws_instance" "myec2" {
ami = "ami-12345678"
instance_type = "t2.micro"
tags = {
Name = "example-instance"
}
lifecycle {
# 在替换资源时,先创建新实例,再销毁旧实例,确保服务不中断
create_before_destroy = true
# 防止误操作销毁实例
prevent_destroy = true
# 忽略 tags 变化,避免因标签变化触发不必要的实例替换
ignore_changes = [
tags,
]
}
}
Facebook评论