Reference theo version đã pin, không bao giờ trỏ vào main.
hcl
module "rds" {
source = "app.terraform.io/acme/rds/aws"
version = "~> 3.2" # registry
}
module "vpc" {
source = "git::ssh://git@github.com/acme/tf-modules.git//vpc?ref=v2.3.0"
}Trỏ vào main nghĩa là hạ tầng đổi chỉ vì ai đó merge một PR, và lúc sự cố không ai lần ra nguyên nhân.
Quy trình release nên có: semver rõ ràng, changelog cho mỗi bản (nhất là breaking change), và test dựng thật trong một account riêng trước khi tag.
Với breaking change: giữ bản cũ chạy được một thời gian và báo trước cho các team đang dùng. Ép nâng cấp đột ngột là cách nhanh nhất khiến các team copy module về repo riêng, và thế là hết dùng chung.
Dấu hiệu module thiết kế tốt: team khác dùng được mà không cần đọc code bên trong, chỉ đọc mô tả variable và output.