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,
    ]
  }
}

Loading

Facebook评论