Lifecycle block customizes resource creation/destruction behavior for advanced scenarios. Arguments:
resource "aws_launch_template" "app" {
lifecycle {
create_before_destroy = true # Create replacement before destroying original (zero-downtime)
prevent_destroy = true # Block terraform destroy (must remove from config first)
ignore_changes = [tags, user_data] # Ignore external modifications to these attributes
replace_triggered_by = [aws_instance.web.id] # Force replacement when referenced resource changes
}
}
(1) create_before_destroy: Create new resource before deleting old (essential for ASG launch templates, load balancer target groups). (2) prevent_destroy: Safety guard for critical resources (databases, S3 buckets) - apply fails if attempted. (3) ignore_changes: Ignore drift for externally-modified attributes (tags added by AWS Config, auto-scaling group size). (4) replace_triggered_by: Force replacement based on other resource changes (Terraform 1.2+). Use cases: Zero-downtime deployments, production safety guards, managing external modifications. Essential for advanced resource management.