Blast radius quá rộng và apply quá chậm: một sai sót chạm tới mọi thứ, mỗi lần chạy phải refresh hàng nghìn resource, và state lock làm các team chờ nhau.
Ba tiêu chí chia thường dùng: theo environment, theo domain nghiệp vụ, và theo nhịp thay đổi.
text
prod/network/ # doi vai lan mot nam
prod/data/ # RDS, ElastiCache - doi hiem, blast radius cao
prod/services/api/ # doi hang ngayNối các state độc lập bằng terraform_remote_state:
hcl
data "terraform_remote_state" "network" {
backend = "s3"
config = { bucket = "acme-tfstate", key = "prod/network/terraform.tfstate" }
}
resource "aws_instance" "api" {
subnet_id = data.terraform_remote_state.network.outputs.private_subnet_ids[0]
}Nhưng cũng đừng chia quá nhỏ, vì nó có cái giá riêng.
Hàng trăm state tí hon làm thay đổi xuyên nhiều phần rất phiền và không ai còn nhìn được bức tranh tổng thể.