Hiện nay, devops đã trở nên quen thuộc và phổ biến. Rất nhiều công cụ ra đời giúp việc cài đặt, thiết lập server trở nên dễ dàng và hiệu quả hơn rất nhiều. Tuy nhiên, ở mức thấp hơn là tạo ra các server, thì không hẳn nhiều người biết, và Terraform sẽ giúp giải quyết điều đó.

Terraform là gì?

Terraform là một công cụ giúp bạn khởi tạo, thay đổi, xóa và quản lý hệ thống (infrastructure) một cách hiệu quả và dễ phán đoán. Nôm na là đưa việc quản lý servers thay vì bằng tay thì sẽ bằng code.

Điểm đặc trưng

Vì là công cụ Infrastructure as Code, Terraform có những đặc điểm nổi bật như sau:

  • Collaborate & Share: Những thiết lập của Terraform có thể được lưu trữ trên các version control như git, svn,... để cùng review và kiểm tra lịch sử.
  • Separation of Plan & Apply: Terraform dễ dàng chia ra các plan cho từng thời điểm, từng môi trường giúp việc quản lý hệ thống rõ ràng hơn rất nhiều,
  • Shareable Modules: Terrform hỗ trợ định nghĩa module giúp việc tái sử dụng, hạn chế lặp code.

Ví dụ

Để có một hình dung cơ bản về Terraform, mình sẽ có một ví dụ về việc tạo VPS ở DigitalOcean:

main.tf

provider "digitalocean" {
  version = "1.4"
  token   = var.do_token
}

resource "digitalocean_volume" "terraform_volume" {
  name                     = "terraform-volume"
  region                   = "sgp1"
  size                     = 200
  initial_filesystem_type  = "ext4"
  initial_filesystem_label = "data"
}

resource "digitalocean_droplet" "terraform_droplet" {
  image    = "centos-7-x64"
  name     = "terraform-droplet"
  region   = "sgp1"
  size     = "512mb"
  ssh_keys = [12928825]
}

resource "digitalocean_volume_attachment" "attachment" {
  volume_id  = digitalocean_volume.terraform_volume.id
  droplet_id = digitalocean_droplet.terraform_droplet.id
}

Có thể thấy ta đã định nghĩa 1 droplet và 1 volume tương ứng. Sau đó sử dụng resource volume_attachment để liên kết chúng lại với nhau. Cuối cùng, chỉ việc chạy lệnh

$ terraform init
$ terraform apply

Ngay sau đó, các thành phần sẽ được tạo chính xác như những gì đã định nghĩa.

Phần tiếp theo mình sẽ nói cụ thể hơn về các thành phần các trong Terraform.