Không. Module tách về mặt code để reuse, nhưng mọi module trong cùng một config vẫn dùng chung một state. Gõ nhầm terraform destroy vẫn xoá hết.
Hai mức tách khác nhau hoàn toàn:
- Module = reuse code, giao diện variable / output.
- State riêng = config độc lập, thư mục riêng, backend key riêng. Đây mới là thứ giới hạn blast radius.
hcl
module "vpc" {
source = "git::ssh://git@github.com/acme/tf-modules.git//vpc?ref=v2.3.0"
cidr = "10.0.0.0/16"
azs = ["ap-southeast-1a", "ap-southeast-1b"]
}Nguyên tắc thiết kế module: giao diện nhỏ và có ý kiến rõ ràng. Module phơi ra 30 variable để cấu hình mọi thứ thì không khác gì viết resource trực tiếp mà lại thêm một tầng gián tiếp.
Bắt buộc với module dùng chung: pin ref. Trỏ vào main nghĩa là hạ tầng đổi vì ai đó vừa merge một PR.