Quay lại

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    comment-3 Created with Sketch Beta. 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 modulechild 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)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday