Day-09: Terraform 中的生命周期管理规则

发布: (2025年12月3日 GMT+8 12:21)
3 min read
原文: Dev.to

Source: Dev.to

生命周期规则

在 Terraform 中,生命周期规则控制资源的创建、更新和销毁方式。它们有助于提升安全性、简化维护,并让你对资源拥有更细粒度的控制。

Terraform 提供了六个生命周期参数:

  • ignore_changes
  • prevent_destroy
  • replace_triggered_by
  • create_before_destroy
  • precondition
  • postcondition

1. create_before_destroy

当资源需要更改时,此规则会在销毁旧资源之前创建新版本,从而减少停机时间(零停机部署)。

// main.tf
resource "aws_instance" "instance" {
  ami           = "ami-0f64121fa59598bf7"
  instance_type = "t3.micro"
  region        = tolist(var.allowed_region)[0]

  tags = var.tags

  lifecycle {
    create_before_destroy = true
  }
}

2. prevent_destroy

防止资源被意外删除。

// main.tf
resource "aws_s3_bucket" "bucket" {
  bucket = "${var.username}-bucket-${var.environment}-day-09"

  lifecycle {
    prevent_destroy = true
  }
}

3. ignore_changes

忽略在 Terraform 之外对资源所做的更改(例如手动编辑标签)。

// main.tf
resource "aws_instance" "instance" {
  ami           = "ami-0f64121fa59598bf7"
  instance_type = "t3.micro"
  region        = tolist(var.allowed_region)[0]

  tags = var.tags

  lifecycle {
    ignore_changes = [tags]
  }
}

4. replace_triggered_by

当指定属性发生变化时强制替换资源。

// main.tf
resource "aws_instance" "instance" {
  ami           = "ami-0f64121fa59598bf7"
  instance_type = "t3.micro"
  region        = tolist(var.allowed_region)[0]

  tags = var.tags

  lifecycle {
    replace_triggered_by = [instance_type]
  }
}

5. precondition

在创建或更新资源之前验证条件。

// main.tf
resource "aws_instance" "instance" {
  ami           = "ami-0f64121fa59598bf7"
  instance_type = "t3.micro"
  region        = tolist(var.allowed_region)[0]

  tags = var.tags

  lifecycle {
    precondition {
      condition     = var.instance_type == "t3.micro"
      error_message = "Instance type must be t3.micro"
    }
  }
}

6. postcondition

在资源已创建或更新之后验证条件。

// main.tf
resource "aws_instance" "instance" {
  ami           = "ami-0f64121fa59598bf7"
  instance_type = "t3.micro"
  region        = tolist(var.allowed_region)[0]

  tags = var.tags

  lifecycle {
    postcondition {
      condition     = aws_instance.instance.instance_state == "running"
      error_message = "Instance is not in running state"
    }
  }
}

最佳实践

  • 使用生命周期规则有效管理资源。
  • 在非生产环境中测试生命周期规则后再应用到生产环境。
  • 在 Terraform 代码中记录使用的生命周期规则,以便更好地理解和维护。
  • 随着需求的变化,定期审查并更新生命周期规则。
  • ignore_changes 要保持谨慎;它可能会隐藏重要的修改。
  • 对关键资源使用 create_before_destroy,以避免停机。

@piyushsachdeva

Back to Blog

相关文章

阅读更多 »

AWS Terraform 生命周期规则

介绍 基础设施即代码(IaC)在您能够完全控制资源在更新、替换和删除过程中的行为时最为强大。Terr…