Terraform cho phép bạn sử dụng biến và dữ liệu trong file cấu hình để giúp tổ chức và tái sử dụng các cấu hình.
Biến (Variables)
Biến trong Terraform được sử dụng để đưa các giá trị động vào file cấu hình. Các biến có thể được định nghĩa trong file cấu hình hoặc thông qua các tập tin riêng biệt. Terraform cung cấp nhiều loại biến, bao gồm biến chuỗi, số, boolean, map và list.
– Định nghĩa biến trong Terraform:
variable "example" {
type = string
default = "default-value"
}
Đoạn code trên định nghĩa một biến trong Terraform với tên là “example”.
type
xác định kiểu của biến, trong trường hợp này là kiểu chuỗi (string).default
xác định giá trị mặc định cho biến, nghĩa là giá trị sẽ được sử dụng nếu không có giá trị nào được truyền vào cho biến.- Ví dụ này tạo một biến “example” kiểu chuỗi với giá trị mặc định là “default-value”. Nếu giá trị khác được truyền vào cho biến, giá trị này sẽ được sử dụng thay vì giá trị mặc định.
– Sử dụng biến trong Terraform:
resource "aws_instance" "example" {
ami = var.ami_id
instance_type = var.instance_type
tags = {
Name = var.name
}
}
Đoạn mã này định nghĩa một tài nguyên EC2 instance trong AWS sử dụng AMI và loại instance được chỉ định bởi các biến.
resource
xác định loại tài nguyên được khai báo, trong trường hợp này là một tài nguyên EC2 instance."aws_instance"
là tên của nhà cung cấp tài nguyên, trong trường hợp này là AWS."example"
là tên tài nguyên EC2 instance mà chúng ta đang khai báo, đây là tên do người dùng đặt.
Các thuộc tính của tài nguyên được định nghĩa sau đó.
ami
là ID của Amazon Machine Image (AMI) được sử dụng để tạo instance. Giá trị của nó được lấy từ biếnvar.ami_id
.instance_type
được định nghĩa là giá trị của biếninstance_type
, nghĩa là loại instance sẽ được sử dụng để tạo instance.tags
được định nghĩa là một map chứa tag của instance, vớiName
là key và giá trị là giá trị của biếnname
.
Tổng quan về đoạn mã này là khởi tạo một EC2 instance với AMI ID và loại instance được định nghĩa trong các biến. Ngoài ra, instance cũng có một tag với key Name
và giá trị là giá trị của biến name
.
Dữ liệu (Data)
Dữ liệu trong Terraform được sử dụng để lấy thông tin từ các nguồn bên ngoài, chẳng hạn như AWS, GCP, hoặc dịch vụ DNS. Terraform hỗ trợ nhiều loại nguồn dữ liệu, bao gồm nguồn dữ liệu AWS, nguồn dữ liệu GCP, nguồn dữ liệu GitHub, và nhiều hơn nữa.
Sử dụng nguồn dữ liệu trong Terraform:
data "aws_ami" "example" {
most_recent = true
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
}
filter {
name = "virtualization-type"
values = ["hvm"]
}
owners = ["099720109477"] # Canonical
}
resource "aws_instance" "example" {
ami = data.aws_ami.example.id
instance_type = "t2.micro"
tags = {
Name = "example-instance"
}
}
Đoạn mã trên định nghĩa một tài nguyên EC2 instance trên AWS và sử dụng dữ liệu (data) của một AMI có sẵn để tạo instance.
data "aws_ami" "example"
định nghĩa một data resource với tênexample
, dùng để lấy thông tin về AMI.most_recent = true
chỉ định rằng data resource sẽ lấy AMI mới nhất.filter
định nghĩa các tiêu chí để tìm kiếm AMI, trong đóname
là tên của AMI vàvirtualization-type
là kiểu ảo hóa của AMI.owners
là danh sách các chủ sở hữu của AMI, trong trường hợp này làCanonical
.
Sau đó, đoạn mã định nghĩa một tài nguyên EC2 instance với AMI được lấy từ data resource data.aws_ami.example.id
, loại instance là t2.micro
và có một tag Name
với giá trị example-instance
.
Tổng quan về đoạn mã này là khởi tạo một EC2 instance với AMI mới nhất, loại instance là t2.micro
và có một tag Name
với giá trị example-instance
. Việc sử dụng data resource giúp tái sử dụng thông tin AMI và giảm thiểu sự trùng lặp trong mã.
Lưu ý rằng các ví dụ này chỉ là minh họa và có thể không hoàn chỉnh hoặc phù hợp với mọi trường hợp sử dụng.