
Terraform là gì: công cụ Infrastructure as Code của HashiCorp
Terraform là một công cụ Infrastructure as Code (IaC) do HashiCorp phát triển, cho phép người dùng khai báo và quản lý hạ tầng máy chủ, mạng, lưu trữ và các dịch vụ thông qua mã cấu hình thay vì thao tác thủ công. Thay vì phải tự click qua giao diện web của các nhà cung cấp đám mây hoặc viết script dài dòng, các kỹ sư vận hành chỉ cần viết một tập tin khai báo trạng thái mong muốn của hệ thống, sau đó chạy terraform init, terraform plan và terraform apply để Terraform tự quyết định các thao tác cần thiết nhằm đưa hạ tầng từ trạng thái hiện tại sang trạng thái mục tiêu.
Một trong những điểm mạnh lớn nhất của Terraform là sự trừu tượng hóa nhà cung cấp qua khái niệm provider. Thay vì phải học riêng SDK hoặc API của AWS, Azure, Google Cloud, Kubernetes hay từng dịch vụ SaaS, người dùng chỉ cần khai báo sử dụng provider tương ứng, ví dụ aws, google, azurerm hay kubernetes, rồi viết cấu hình bằng ngôn ngữ chung HashiCorp Configuration Language hoặc JSON. Terraform sẽ tự xử lý việc gọi API thích hợp, chuyển đổi định dạng dữ liệu và quản lý trạng thái qua state file, thường là tệp terraform.tfstate, hoặc qua remote state backend như Amazon S3, HashiCorp Consul hay Terraform Cloud.
Vì Terraform hoạt động ở mức khai báo chứ không phải mức lệnh tuần tự, nó mang lại một ưu điểm then chốt: khả năng lập kế hoạch trước. Mỗi lần chạy terraform plan, Terraform sẽ so sánh trạng thái hiện tại đọc từ state với trạng thái mong muốn khai báo trong các tệp cấu hình, rồi tạo ra một bản kế hoạch chi tiết cho biết tài nguyên nào sẽ được tạo mới, cập nhật hay xóa bỏ. Nhờ đó nhóm phát triển có thể xem xét toàn bộ thay đổi mà chưa hề đụng tới hạ tầng thật, và chỉ thực thi khi đã chắc chắn kế hoạch là đúng ý.

Quy trình cơ bản: Init, Plan, Apply
Một dự án Terraform thường bắt đầu bằng việc tạo thư mục dự án rồi chạy terraform init. Lệnh này sẽ tải xuống các provider cần thiết dựa trên phần khai báo trong khối required_providers, đồng thời thiết lập backend để lưu trữ state, có thể là cục bộ hoặc từ xa. Sau khi khởi tạo thành công, người dùng chạy terraform plan để xem trước những thay đổi sẽ được thực hiện. Bản kế hoạch hiển thị dưới dạng danh sách thao tác với ký hiệu dấu cộng nghĩa là tạo mới, dấu nghiêng nghĩa là cập nhật và dấu trừ nghĩa là xóa, kèm theo giá trị cũ cùng giá trị mới của các thuộc tính liên quan.
Lệnh terraform apply sẽ thực thi bản kế hoạch đó, hoặc tạo một bản kế hoạch mới ngay tại thời điểm chạy nếu không có bản kế hoạch trước đó. Trước khi thực thi, Terraform sẽ hỏi xác nhận, trừ khi dùng cờ -auto-approve. Trong quá trình đó, Terraform gọi API của các nhà cung cấp thông qua provider đã thiết lập và sau mỗi thao tác thành công sẽ cập nhật state để phản ánh trạng thái thực tế của hạ tầng.
Một tính năng cực kỳ hữu ích là khóa trạng thái khi dùng backend hỗ trợ khóa, ví dụ Amazon S3 kèm DynamoDB hoặc HashiCorp Consul. Cơ chế khóa này ngăn hai người cùng chạy apply trên một state, tránh việc ghi đè chéo và dẫn tới hạ tầng không nhất quán. Điều này đặc biệt quan trọng trong môi trường làm việc nhóm, nơi nhiều kỹ sư có thể cùng thao tác vào cùng một hệ thống.

Quản lý cấu hình tái sử dụng bằng Modules

Khi hạ tầng trở nên lớn và phức tạp, việc lặp lại cùng một khối cấu hình, ví dụ một cụm web server gồm cân bằng tải, nhóm tự động mở rộng và cơ sở dữ liệu, sẽ trở nên dài dòng và dễ sinh lỗi. Để giải quyết vấn đề này, Terraform cung cấp khái niệm module, tức một thư mục đóng gói nhóm tài nguyên liên quan cùng với các biến đầu vào và biến đầu ra để có thể tái sử dụng ở nhiều nơi.
Một module điển hình có cấu trúc như sau:
main.tfchứa các tài nguyên chính của module, ví dụ một phiên bản máy chủ và một nhóm bảo mật;variables.tfkhai báo các biến đầu vào mà người dùng có thể tùy chỉnh khi gọi module, ví dụ số lượng phiên bản hay loại máy chủ;outputs.tfkhai báo các giá trị đầu ra mà phần khác của hệ thống có thể sử dụng, ví dụ danh sách địa chỉ IP của các máy chủ web;- tùy chọn, một tệp
README.mdmô tả cách sử dụng module.
Để dùng một module, người dùng chỉ cần khai báo một khối module với đường dẫn tới thư mục module và truyền giá trị cho các biến đầu vào. Terraform sẽ lấy mã nguồn của module, áp dụng các giá trị được truyền vào, rồi xử lý y hệt như thể các tài nguyên đó được viết trực tiếp trong cấu hình chính. Cách làm này không chỉ giảm lặp lại mã nguồn mà còn khiến việc nâng cấp và bảo trì trở nên đồng bộ: khi cần sửa một phần cấu hình dùng chung, chỉ cần cập nhật module rồi chạy lại terraform apply, thay đổi sẽ lan tỏa tới mọi nơi đang dùng nó.
Terraform và các công cụ IaC khác
Trong hệ sinh thái công cụ hạ tầng dạng mã, Terraform chỉ là một trong nhiều lựa chọn phổ biến. Các phương án thay thế đáng chú ý gồm:
- AWS CloudFormation, dịch vụ nguyên thuỷ của Amazon, chỉ hoạt động trên hệ sinh thái AWS và dùng định dạng JSON hoặc YAML;
- Ansible, dùng các tệp playbook dạng YAML để cấu hình và triển khai ứng dụng mà không cần cài đặt agent, mạnh hơn trong việc thiết lập hệ điều hành và cài phần mềm trên máy chủ đã tồn tại;
- Chef và Puppet, hai công cụ quản lý cấu hình dựa trên agent và ngôn ngữ Ruby, phù hợp khi cần kiểm soát chi tiết trên quy mô hàng nghìn máy;
- Pulumi, cho phép viết hạ tầng bằng các ngôn ngữ lập trình quen thuộc như TypeScript, Python, Go hay C thay vì phải học một ngôn ngữ riêng;
- Crossplane, mở rộng Kubernetes để quản lý hạ tầng thông qua các tài nguyên tùy chỉnh, cho phép dùng lệnh quen thuộc để vận hành hạ tầng như vận hành workload.
Terraform nổi bật ở chỗ hoạt động độc lập với nhà cung cấp từ ngay đầu tiên, có hệ sinh thái hơn hai nghìn provider chính thức và do cộng đồng đóng góp, đồng thời có cách khai báo rõ ràng cùng ranh giới sạch giữa bước lập kế hoạch và bước thực thi, từ đó rất hợp lý cho môi trường làm việc nhóm.
Giấy phép và sự ra đời của OpenTofu
Terraform ban đầu được phát hành theo giấy phép Mozilla Public License phiên bản 2.0, cho phép sử dụng, sửa đổi và phân phối tự do, bao gồm cả mục đích thương mại. Tuy nhiên, vào tháng 8 năm 2023, HashiCorp công bố rằng toàn bộ sản phẩm của công ty sẽ chuyển sang giấy phép Business Source License, trong đó có một điều khoản giới hạn: bất kỳ đơn vị nào cung cấp dịch vụ cạnh tranh, ví dụ một dịch vụ quản lý Terraform hay một nền tảng tích hợp sâu Terraform, không được dùng phiên bản cộng đồng cho mục đích thương mại.
Thông báo này lập tức gây tranh luận trong cộng đồng mã nguồn mở, bị cho là đã thay đổi bản chất của một dự án từng là phần mềm tự do trọn vẹn sang một mô hình nguồn có điều kiện. Phản hồi lại, cộng đồng nhanh chóng tách nhánh mã nguồn từ phiên bản Terraform 1.5.x, đặt tên là OpenTF, sau đó đổi tên thành OpenTofu. Dự án được Liên minh phần mềm Linux tiếp nhận và tiếp tục duy trì giấy phép Mozilla Public License phiên bản 2.0, bảo đảm công cụ này luôn miễn phí cho mọi người. Kể từ đó, OpenTofu đã phát triển thành một lựa chọn thay thế bền vững, đặc biệt hấp dẫn với các tổ chức lo ngại về phụ thuộc vào một nhà cung cấp duy nhất hoặc e ngại về các điều khoản giấy phép mới.
Kết luận
Terraform đóng vai trò trung tâm trong việc chuyển đổi cách quản lý hạ tầng từ thao tác thủ công sang khai báo bằng mã, từ cách làm theo cảm tính sang cách làm dựa trên chiến lược. Với khả năng làm việc trên nhiều nền tảng đám mây khác nhau, hệ thống module linh hoạt và quy trình lập kế hoạch rồi mới áp dụng minh bạch, Terraform giúp các tổ chức giảm lỗi do con người gây ra, tăng tốc độ triển khai và đưa hạ tầng vào cùng hệ thống quản lý phiên bản với mã nguồn ứng dụng. Mặc dù đã có OpenTofu xuất hiện như một lựa chọn mở nguồn sau thay đổi giấy phép, Terraform vẫn là công cụ phổ biến nhất nhờ sự ổn định, tài liệu phong phú và mạng lưới đối tác rộng. Việc chọn giữa hai công cụ thường phụ thuộc vào mức độ cân bằng giữa tính năng và sự thoải mái với điều khoản cấp phép.
