Infrastructure as Code và Terraform cho người mới bắt đầu

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Bạn dựng máy chủ bằng cách bấm chuột trên giao diện web của nhà cung cấp cloud. Sáu tháng sau, không ai nhớ đã bấm những gì, và dựng lại môi trường giống hệt là chuyện bất khả thi. Infrastructure as Code (IaC) giải quyết điều đó bằng cách mô tả hạ tầng dưới dạng mã.

Infrastructure as Code là gì?

IaC là thực hành định nghĩa máy chủ, mạng, cơ sở dữ liệu và các tài nguyên khác bằng file văn bản, rồi để công cụ tự tạo ra chúng. Vì là mã nên bạn có thể lưu trong Git, xem lịch sử thay đổi, review bằng pull request và chạy lại bất cứ lúc nào.

Lợi ích:

  • Lặp lại được: dựng lại môi trường staging giống production chỉ bằng một lệnh.
  • Có lịch sử và review: biết ai đổi gì, khi nào, vì sao.
  • Giảm sai sót thủ công và giảm tình trạng 'mỗi máy một kiểu'.
  • Khôi phục nhanh sau sự cố nghiêm trọng.

Terraform làm gì?

Terraform là công cụ IaC phổ biến, dùng ngôn ngữ khai báo riêng gọi là HCL. Bạn mô tả trạng thái mong muốn (ví dụ: tôi muốn có một máy chủ cỡ này), còn Terraform tự tính ra cần thêm, sửa hay xóa gì để đạt được trạng thái đó. Nó làm việc với nhiều nhà cung cấp thông qua các provider.

Ví dụ minh họa

Đoạn mã dưới đây mô tả khái niệm cơ bản; tên provider và thuộc tính cụ thể sẽ khác theo nhà cung cấp bạn dùng, nên hãy xem tài liệu của provider tương ứng:

terraform {
  required_providers {
    docker = {
      source = "kreuzwerker/docker"
    }
  }
}

provider "docker" {}

resource "docker_image" "nginx" {
  name = "nginx:1.27-alpine"
}

resource "docker_container" "web" {
  name  = "web"
  image = docker_image.nginx.image_id
  ports {
    internal = 80
    external = 8080
  }
}

Ví dụ dùng provider Docker để bạn thử ngay trên máy cục bộ mà không cần tài khoản cloud: nó kéo image Nginx và chạy container. Với cloud, bạn thay bằng các tài nguyên như máy ảo, mạng, bucket lưu trữ.

Quy trình làm việc cơ bản

terraform init
terraform plan
terraform apply
terraform destroy
  1. init: tải provider và chuẩn bị thư mục làm việc.
  2. plan: xem trước sẽ tạo, sửa, xóa gì. Luôn đọc kỹ bước này.
  3. apply: thực sự áp dụng thay đổi sau khi bạn xác nhận.
  4. destroy: xóa các tài nguyên Terraform quản lý. Dùng cẩn thận.

State: phần quan trọng nhất cần hiểu

Terraform lưu một file state ghi lại tài nguyên thật nó đang quản lý. Đây là cách nó biết cần thay đổi gì. Một vài quy tắc:

  • Không sửa file state bằng tay.
  • Không commit state lên Git công khai vì nó có thể chứa thông tin nhạy cảm.
  • Làm việc nhóm thì dùng remote backend để lưu state tập trung và có khóa chống hai người cùng áp dụng thay đổi.

Biến và module

Dùng biến (variable) để tránh ghi cứng giá trị, và module để đóng gói nhóm tài nguyên dùng lại nhiều lần, ví dụ một module 'mạng chuẩn' dùng cho cả staging lẫn production. Bí mật như mật khẩu nên truyền qua biến môi trường hoặc kho bí mật, không ghi thẳng vào file.

Lưu ý khi bắt đầu

  1. Bắt đầu từ môi trường thử nghiệm, đừng thử đầu tiên trên production.
  2. Đặt cảnh báo chi phí vì IaC giúp tạo tài nguyên rất nhanh, kể cả tài nguyên tốn tiền.
  3. Đừng vừa dùng IaC vừa chỉnh tay trên giao diện web, vì sẽ gây lệch trạng thái.
  4. Đưa plan vào pull request để cả nhóm xem trước thay đổi.
  5. Có công cụ thay thế như OpenTofu hoặc Pulumi, nguyên lý chung tương tự.

Kết luận

IaC biến hạ tầng từ những thao tác thủ công khó nhớ thành mã có thể review, kiểm thử và tái sử dụng. Bạn không cần quản lý cả hệ thống ngay; hãy thử mô tả một tài nguyên nhỏ bằng Terraform và làm quen với chu trình init, plan, apply.

Nếu muốn học IaC cùng các bài thực hành dựng hạ tầng thật, hãy xem lộ trình tại codebem.com.

author_photo
Nguyễn Đình Cường

0 comment