search

07-Terraform Data Types – Các kiểu dữ liệu trong Terraform

calendar_today Đăng ngày: 28/04/2026

Khi làm việc với variable trong Terraform, bạn cần khai báo kiểu dữ liệu cho từng biến. Bài này mình tổng hợp toàn bộ các kiểu dữ liệu Terraform hỗ trợ, kèm ví dụ code thực tế để dễ hình dung.

1. Kiểu dữ liệu cơ bản

Terraform có 3 kiểu dữ liệu nguyên thủy:

Kiểu Mô tả Ví dụ
string Chuỗi ký tự "hello"
number Số nguyên hoặc số thực 99, 3.14
bool Giá trị đúng/sai true, false
variable "str_ex" {
  type    = string
  default = "str_val"
}

variable "num_ex" {
  type    = number
  default = 99
}

variable "bool_ex" {
  type    = bool
  default = true
}

2. Kiểu dữ liệu phức tạp

Ngoài 3 kiểu cơ bản, Terraform còn hỗ trợ các kiểu dữ liệu phức tạp hơn để biểu diễn cấu trúc dữ liệu nhiều chiều.

Kiểu Mô tả Ví dụ
list(type) Danh sách các phần tử cùng kiểu, có thứ tự, cho phép trùng lặp ["a", "b", "b"]
set(type) Giống list nhưng tự động sắp xếploại bỏ trùng lặp [2,1,3,3][1,2,3]
map(type) Cặp key/value, các value phải cùng kiểu {name = "test"}
object Cặp key/value, các value có thể khác kiểu {name = "test", age = 30}
tuple Giống list nhưng các phần tử có thể khác kiểu [0, "string", true]

Điểm khác nhau cần nhớ

  • list vs set: cùng là danh sách, nhưng set không có thứ tự cố định và không chứa phần tử trùng.
  • map vs object: cùng là key/value, nhưng map yêu cầu tất cả value cùng kiểu, còn object thì không.
  • list vs tuple: cùng có thứ tự, nhưng tuple cho phép các phần tử khác kiểu nhau.
variable "list_ex" {
  type    = list(string)
  default = ["str1", "str2"]
}

variable "set_ex" {
  type    = set(string)
  default = ["a", "b", "c"]
}

variable "map_ex" {
  type = map(any)
  default = {
    name = "test",
    age  = 30
  }
}

variable "object_ex" {
  type = object({
    name = string
    age  = number
  })
  default = {
    "name" = "test",
    "age"  = 30
  }
}

variable "tuple_ex" {
  type = tuple([
    object({
      name = string,
      age  = number
    }),
    object({
      name = string,
      age  = number
    })
  ])
  default = [{
    name = "test_1",
    age  = 29
  }, {
    name = "test_2",
    age  = 31
  }]
}

Lưu ý: Với map(any), bạn cho phép value có kiểu bất kỳ. Tuy nhiên trong thực tế nên tránh dùng any nếu có thể — khai báo kiểu cụ thể giúp Terraform validate dữ liệu sớm hơn, tránh lỗi lúc apply.

3. Tóm tắt

Nắm được các kiểu dữ liệu là nền tảng để làm việc hiệu quả với variable và module trong Terraform. Trong thực tế, string, number, bool, listmap là những kiểu bạn sẽ gặp nhiều nhất. objecttuple thường xuất hiện khi cần truyền cấu trúc dữ liệu phức tạp vào module.

Bài tiếp theo mình sẽ đi vào cách khai báo và sử dụng variable trong Terraform — bao gồm cách truyền giá trị qua file .tfvars và biến môi trường.