Terraform là gì? Infrastructure as Code cho cloud đa nền tảng

Terraform là gì? Infrastructure as Code cho cloud đa nền tảng

Terraform là công cụ Infrastructure as Code (IaC) mã nguồn mở được phát triển bởi HashiCorp. Nó cho phép bạn định nghĩa, cung cấp và quản lý hạ tầng cloud thông qua mã khai báo thay vì thao tác thủ công trên giao diện web.

Thay vì nhấp vào AWS Console, Azure Portal hoặc GCP UI để tạo máy ảo, mạng VPC, bucket S3, bạn viết file .tf mô tả tài nguyên cần có. Terraform sẽ tự động so sánh trạng thái hiện tại với trạng thái mong muốn và thực hiện các thao tác cần thiết để đưa hạ tầng về trạng thái đích.

Lưu đồ làm việc của Terraform

Nguồn: HashiCorp Terraform docs

Tại sao nên dùng Terraform

Terraform giải quyết bài toán “drift” – khi hạ tầng thực tế khác với tài liệu hoặc ý định ban đầu. Các lợi ích chính bao gồm:

  • Khả năng lặp lại: Một cùng tập mã có thể triển khai môi trường dev, staging và production đồng nhất.
  • Version control: Mã hạ tầng được lưu trên Git, cho phép xem lịch sử thay đổi và rollback an toàn.
  • Đa nền tảng: Hỗ trợ hơn 100 provider bao gồm AWS, Azure, GCP, Kubernetes, Docker, và thậm chí là DNS, GitHub, v.v.
  • Lên kế hoạch trước khi thực thi: Lệnh terraform plan cho thấy chính xác những gì sẽ thay đổi trước khi áp dụng.
  • Hợp tác nhóm: Nhiều engineer có thể làm việc trên cùng một mã hạ tầng thông qua CI/CD pipeline.
Ví dụ file Terraform tạo EC2 instance trên AWS

Nguồn: Terraform Registry

Cách hoạt động cơ bản

Terraform hoạt động theo ba bước chính:

  1. Init: terraform init tải xuống provider plugins cần thiết.
  2. Plan: terraform plan so sánh và tạo ra kế hoạch thay đổi.
  3. Apply: terraform apply thực thi kế hoạch để đạt trạng thái mong muốn.

Mỗi provider định nghĩa các resource (tài nguyên) và data source. Ví dụ, với AWS provider, bạn có thể định nghĩa aws_instance, aws_s3_bucket, aws_security_group, và Terraform sẽ hiểu cách tạo, cập nhật, hoặc xóa chúng qua AWS API. Chi tiết tại AWS Provider docs.

Cấu trúc thư mục Terraform tốt cho dự án lớn

Nguồn: Terraform Language docs

Quản lý state với Terraform

Terraform lưu trữ trạng thái thực tế của hạ tầng trong file terraform.tfstate. File này là “single source of truth” giúp Terraform biết những gì đã được tạo ra trước đó. Trong môi trường team, bạn nên lưu state file từ xa thông qua backend như S3 + DynamoDB lock, hoặc Terraform Cloud. Điều này ngăn chặn xung đột khi hai engineer chạy apply đồng thời.

State chứa thông tin nhạy cảm như password, key pair, IP nội bộ. Bật mã hóa state file, tránh commit state lên Git công khai. Một số địa chỉ leak state file đã bị lộ credential và bị khai thác nặng nề. Tham khảo chi tiết tại Terraform State docs.

Terraform Modules: Tái sử dụng mã hạ tầng

Module là cách Terraform nhóm mã thành thành phần tái sử dụng. Thay vì sao chép mã VPC qua lại, bạn viết một module VPC với input (vpc_id, subnet_cidr) và output (public_subnet_ids, private_subnet_ids). Module được lưu trên registry, GitHub, hoặc thư mục modules trong dự án.

Module giúp tiêu chuẩn hóa practice giữa các team: đảm bảo mọi VPC đều có tag chuẩn, flow log được bật, và CIDR không chồng chéo. Ví dụ phổ biến: VPC module, EKS module, RDS module. Xem tại Terraform Registry.

Kết hợp với Terraform Cloud hoặc Atlantis, module cho phép workflow “plan as PR comment” – khi developer mở PR, bot tự động chạy plan và đăng comment kết quả. Reviewer nhìn thấy chính xác thay đổi trước khi merge. Đây là quy trình làm việc chuẩn của các team DevOps trưởng thành hiện nay.

Terraform vs CloudFormation/ARM Template

So sánh với công cụ native của cloud providers, Terraform mang lại ưu điểm vượt trội:

  • Đa cloud: Một mã hoạt động trên AWS, Azure và GCP đồng thời.
  • Cộng đồng lớn: Hàng nghìn module miễn phí trên Terraform Registry cho mọi nhu cầu từ VPC đến EKS cluster.
  • Ngôn ngữ khai báo sạch: HCL (HashiCorp Configuration Language) dễ đọc và học hơn JSON/YAML của CloudFormation.

Tuy nhiên, công cụ native có thể hỗ trợ đầy đủ tính năng mới nhất sớm hơn vì được phát triển trực tiếp bởi nhà cung cấp cloud.

Kết luận

Terraform đã trở thành tiêu chuẩn de facto cho quản lý hạ tầng cloud trong doanh nghiệp và startup. Khả năng làm việc đa nền tảng, cộng đồng module phong phú, và quy trình làm việc an toàn qua plan/apply giúp đội ngũ triển khai hạ tầng nhanh chóng, nhất quán, và có thể kiểm soát. Nếu bạn đang quản lý nhiều tài nguyên cloud, Terraform là công cụ không thể thiếu trong bộ công cụ DevOps hiện đại.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Turborepo: Hệ thống build monorepo siêu nhanh từ Vercel

Turbo hay Turborepo là hệ thống build monorepo mã nguồn mở được Vercel phát triển, viết bằng Rust để đạt tốc độ cao nhất. Trong môi trường JavaScript và TypeScript…

Xem thêm

Homebrew Package Manager quản lý công cụ trên macOS

Homebrew là gì? Homebrew là package manager mã nguồn mở cho macOS và Linux. Nó giúp lập trình viên cài, cập nhật, gỡ cài đặt công cụ dòng lệnh (CLI)…

Xem thêm

Git Worktree: Quản lý nhiều branch song song trong một repo

Tại sao cần Git Worktree? Git workflow thông thường ép bạn chuyển branch liên tục: git checkout feature-A, sửa, rồi git checkout main, hotfix, rồi quay lại. Mỗi lần checkout…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất