Wednesday, January 22, 2025

[Terraform] Lesson 4 – Variables and Data

-

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ến var.ami_id.
  • instance_type được định nghĩa là giá trị của biến instance_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ới Name là key và giá trị là giá trị của biến name.

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ên example, 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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories