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ếp và loạ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ớ
listvsset: cùng là danh sách, nhưngsetkhông có thứ tự cố định và không chứa phần tử trùng.mapvsobject: cùng là key/value, nhưngmapyêu cầu tất cả value cùng kiểu, cònobjectthì không.listvstuple: cùng có thứ tự, nhưngtuplecho 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ùnganynế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úcapply.
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, list và map là những kiểu bạn sẽ gặp nhiều nhất. object và tuple 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.