BÀI 4: Hiểu về hướng viết theo dạng Module trong Terraform – Cấu trúc, tổ chức, tái sử dụng Chuyên mục Devops 2025-05-15 1 Lượt xem 1 Lượt thích 0 Bình luận
Mục tiêu bài học
-
Hiểu module là gì trong Terraform
-
Phân biệt root module và child module
-
Biết cách tổ chức folder theo dạng module
-
Học cách truyền biến giữa các module
-
Giúp code gọn gàng, tái sử dụng, dễ bảo trì
🤔 1. Terraform Module là gì?
Module là tập hợp các file Terraform (.tf) được đóng gói và sử dụng như 1 khối có thể tái sử dụng.
Bất kỳ thư mục nào chứa .tf cũng có thể là một module.
Có 2 loại:
Loại | Mô tả |
---|---|
Root Module | Là nơi bạn chạy terraform apply, terraform plan, thường là thư mục gốc của dự án |
Child Module | Module được gọi từ root module hoặc module khác |
📦 2. Tại sao nên dùng module?
Lợi ích | Giải thích |
---|---|
🔁 Tái sử dụng | Viết một lần – dùng cho nhiều môi trường (dev, staging, prod) |
🧹 Gọn gàng | Tách code phức tạp ra nhiều phần nhỏ |
🧪 Dễ kiểm thử | Có thể test riêng từng module |
💼 Dễ mở rộng | Dễ quản lý khi dự án lớn lên |
🧱 3. Cấu trúc thư mục dạng module chuẩn
Ví dụ bạn muốn tạo một module triển khai EC2:
terraform-ec2-module-lab/
├── main.tf
├── variables.tf
├── outputs.tf
├── terraform.tfvars
├── modules/
│ └── ec2/
│ ├── main.tf
│ ├── variables.tf
│ └── outputs.tf
-
main.tf ở root gọi module ec2 từ thư mục modules/ec2
-
Module ec2 có thể dùng ở bất kỳ nơi nào khác
📥 4. Gọi module như thế nào?
Từ main.tf ở root:
module "ec2_instance" {
source = "./modules/ec2"
ami_id = var.ami_id
instance_type = var.instance_type
key_name = var.key_name
subnet_id = var.subnet_id
}
📤 5. Truyền input vào module (biến)
Trong modules/ec2/variables.tf:
variable "ami_id" {}
variable "instance_type" {}
variable "key_name" {}
variable "subnet_id" {}
Terraform cho phép bạn truyền biến từ root vào module, giống như gọi hàm và truyền tham số.
📥 6. Trả output từ module
Trong modules/ec2/outputs.tf:
output "instance_id" {
value = aws_instance.web.id
}
Tại root, bạn có thể dùng lại:
output "ec2_id" {
value = module.ec2_instance.instance_id
}
🛠️ 7. Một số lưu ý quan trọng
Vấn đề | Giải thích |
---|---|
🔁 Không dùng hardcode | Luôn dùng biến (variable) thay vì giá trị cố định |
✅ Tách nhỏ hợp lý | Mỗi module chỉ nên làm 1 việc: ec2, vpc, s3,... |
🔐 Không commit nhầm | Bỏ terraform.tfstate, .terraform vào .gitignore |
🧪 Dùng default test | Dùng môi trường nhỏ để test module trước khi đưa vào prod |
💡 Tổng kết
Bạn đã học được | Ghi nhớ |
---|---|
✅ Khái niệm và vai trò module | Là đơn vị tái sử dụng hạ tầng |
✅ Cách tổ chức module chuẩn | main.tf, variables.tf, outputs.tf |
✅ Cách truyền biến vào/ra | input, output |
✅ Gọi module từ root module | module "x" { source = "..." } |
👉 Tiếp theo: [Bài 5: Bài lab cơ bản sử dụng Terraform theo hướng module – ví dụ triển khai EC2]
Bình luận (0)