Vì chúng chứa dữ liệu nên không replace tự do được. Với app server, destroy/create là thao tác bình thường; với database, cùng thao tác đó là mất dữ liệu.
Các lớp bảo vệ nên áp cùng lúc:
hcl
resource "aws_db_instance" "main" {
deletion_protection = true
skip_final_snapshot = false
backup_retention_period = 30
lifecycle { prevent_destroy = true }
}Quan trọng không kém: tách chúng sang state riêng (prod/data/), để một apply cho service không bao giờ chạm tới chúng.
Ở pipeline: parse plan JSON và chặn merge nếu có delete hoặc replace trên resource thuộc nhóm stateful.
Một cách nghĩ về ranh giới trách nhiệm: Terraform quản lý vòng đời hạ tầng, không quản lý vòng đời dữ liệu. Migration schema, đổi engine version, chuyển dữ liệu nên thuộc một quy trình riêng có kiểm soát chặt hơn.