Terraform: Công cụ Infrastructure as Code của HashiCorp
Terraform infrastructure as code là công cụ của HashiCorp để định nghĩa tài nguyên cloud và on-prem trong các file cấu hình khai báo, rồi tạo và thay đổi chúng qua luồng xem-trước-rồi-apply. Repo này là Terraform core — CLI và graph engine — viết bằng Go, với các provider nạp dưới dạng plugin từ Terraform Registry.
Hãy chọn Terraform nếu bạn quản lý hạ tầng trên nhiều hơn một nhà cung cấp và muốn một luồng khai báo duy nhất với bước plan cho thấy mọi thay đổi trước khi nó xảy ra. Bỏ qua nếu bạn dồn hết vào một cloud (IaC gốc của cloud đó có thể hợp hơn), hoặc nếu việc đổi giấy phép sang Business Source License năm 2023 là điểm cản — khi đó bản fork OpenTofu là câu trả lời cắm-là-chạy.
Vấn đề nó giải quyết
Bấm chuột qua các console cloud để dựng hạ tầng không mở rộng được: thay đổi không được review, các môi trường trôi dạt khác nhau, và không ai tái tạo lại được cấu hình của tháng trước. Câu trả lời của Terraform là viết hạ tầng dưới dạng code trong các file text bạn commit vào git, để một thay đổi trở thành một diff, một lần review và một lần apply lặp lại được thay vì một chuỗi bấm chuột thủ công.
Đây là gì?
Terraform infrastructure as code là công cụ của HashiCorp mã hóa các API thành các file cấu hình khai báo. Bạn mô tả tài nguyên mình muốn bằng HCL, và Terraform tự tính ra các hành động tạo, cập nhật hay hủy cần thiết để đạt trạng thái đó. README liệt kê bốn ý tưởng cốt lõi: infrastructure as code, execution plan, resource graph và tự động hóa thay đổi. Repo này chỉ chứa Terraform core — CLI và graph engine — còn các provider (AWS, Azure, GCP và nhiều thứ khác) là các plugin riêng kéo về từ Terraform Registry.
Vì sao đang được chú ý
Terraform đã trở thành lựa chọn mặc định cho infrastructure as code đa cloud, và repo này ở mức khoảng 49.000 sao GitHub tương xứng với điều đó. Nó cũng ở trong tin tức vì một lý do khác: năm 2023 HashiCorp đổi giấy phép Terraform từ MPL 2.0 mã nguồn mở sang Business Source License, và đó là giấy phép repo này đang phát hành theo. Động thái đó đẩy một phần cộng đồng tạo ra OpenTofu, một bản fork giữ theo giấy phép mã nguồn mở cũ — nên Terraform vẫn là chủ đề bàn tán cả về kỹ thuật lẫn giấy phép.
Tính năng chính
- ✓Cấu hình khai báo bằng HCL — bạn mô tả trạng thái cuối mong muốn và Terraform tự tính các bước để đạt tới đó
- ✓Một execution plan (terraform plan) xem trước chính xác cái gì sẽ được tạo, thay đổi hay hủy trước khi bạn cam kết
- ✓Một resource graph ánh xạ các phụ thuộc và tạo song song các tài nguyên độc lập
- ✓Tự động hóa thay đổi: các cập nhật phức tạp apply theo đúng thứ tự với ít can thiệp tay, theo README
- ✓Mô hình plugin provider — AWS, Azure, GCP và provider bên thứ ba tự tải về từ Terraform Registry
- ✓Cấu hình là text quản lý phiên bản được, nên hạ tầng nằm trong git cạnh code ứng dụng
Trường hợp dùng tốt nhất
- •Cấp phát và cập nhật hạ tầng đa cloud từ một codebase khai báo duy nhất
- •Review thay đổi hạ tầng như một git diff trước khi chúng đụng tới bất cứ thứ gì đang chạy
- •Dựng các môi trường dev, staging và prod tái tạo được từ cùng một cấu hình
- •Nối thay đổi hạ tầng vào CI để việc apply được tự động hóa và có thể kiểm toán
Cách cài đặt / dùng thử
README không kèm lệnh cài đặt — nó trỏ tới các hướng dẫn getting-started của HashiCorp và tài liệu tại developer.hashicorp.com. Trên thực tế Terraform phát hành dưới dạng một binary Go duy nhất bạn đặt vào PATH, và HashiCorp có chứng chỉ Terraform Associate cho các đội muốn một lộ trình học chính quy. Xem tài liệu chính thức để biết cách cài hiện tại cho hệ điều hành của bạn.
Cách sử dụng
Vòng lặp Terraform infrastructure as code điển hình là: viết tài nguyên trong các file .tf (HCL), chạy bước plan để xem trước thay đổi, rồi apply để biến chúng thành thật — README mô tả luồng plan-rồi-apply này là cách tránh bất ngờ. Các provider được kéo tự động từ Terraform Registry. README không đưa ra lệnh cụ thể; xem developer.hashicorp.com để biết luồng làm việc đầy đủ.
Điểm mạnh
- ✓Bước plan cho thấy mọi thay đổi trước khi nó xảy ra, cắt giảm các tai nạn apply mù
- ✓Một luồng khai báo duy nhất trải khắp nhiều cloud và dịch vụ thay vì một công cụ khác nhau cho mỗi nhà cung cấp
- ✓Resource graph song song hóa công việc độc lập, nên các lần apply lớn không hoàn toàn tuần tự
- ✓Cấu hình là text thuần dưới quản lý phiên bản — thay đổi hạ tầng được review như bất kỳ code nào
- ✓Hệ sinh thái provider lớn qua Registry, gồm cả provider do cộng đồng bảo trì
Hạn chế & rủi ro
- △Quản lý state là phần khó: Terraform theo dõi thực tế trong một file state, và việc chia sẻ, khóa và bảo vệ state đó (remote backend) là gánh nặng vận hành thật — một file state hỏng hay bị trôi dạt dẫn tới gỡ lỗi đau đầu
- △HCL và tư duy plan/apply có đường cong học tập; một plan trông sạch vẫn có thể lỗi giữa chừng khi apply và để hạ tầng thay đổi dở dang
- △Giấy phép: HashiCorp đổi giấy phép Terraform từ MPL 2.0 mã nguồn mở sang Business Source License năm 2023, nên repo này là source-available, không phải mã nguồn mở theo OSI — điều đó hạn chế một số cách dùng thương mại cạnh tranh và là lý do bản fork OpenTofu tồn tại
- △Repo này chỉ là Terraform core; độ phủ và chất lượng provider khác nhau, và bạn phụ thuộc vào Terraform Registry cùng các bên bảo trì thứ ba cho những phần thực sự nói chuyện với cloud của bạn
Lựa chọn thay thế
Ai nên thử — và ai nên bỏ qua
Các đội chạy hạ tầng trên nhiều hơn một cloud hay dịch vụ, muốn thay đổi được xem trước và quản lý phiên bản, sẽ tận dụng Terraform nhiều nhất. Nếu bạn gắn với một nhà cung cấp duy nhất, IaC gốc của cloud đó có thể hợp hơn, và nếu Business Source License là vấn đề với bạn, hãy chọn OpenTofu — nó bám sát Terraform dưới giấy phép mã nguồn mở cũ.
Câu hỏi thường gặp
Terraform là công cụ infrastructure as code của HashiCorp. Bạn mô tả tài nguyên cloud và on-prem trong các file cấu hình HCL khai báo, và Terraform tạo, thay đổi, quản lý phiên bản chúng qua luồng xem-trước-rồi-apply. Repo này là Terraform core, viết bằng Go; các provider là plugin riêng.
Không còn theo nghĩa OSI nữa. HashiCorp đổi giấy phép Terraform từ MPL 2.0 sang Business Source License năm 2023, nên giờ nó là source-available. Bản fork OpenTofu tiếp tục theo giấy phép mã nguồn mở cũ.
OpenTofu là một bản fork cộng đồng của Terraform khởi động sau lần đổi giấy phép 2023. Nó giữ theo MPL mã nguồn mở và hướng tới cắm-là-chạy, trong khi Terraform do HashiCorp phát triển dưới Business Source License.
Bạn viết cấu hình trong các file .tf, chạy bước plan để xem trước cái gì sẽ được tạo, thay đổi hay hủy, rồi apply để thực thi. README coi execution plan là cách tránh bất ngờ khi Terraform thay đổi hạ tầng.
Không — Terraform tự tải provider từ Terraform Registry. Repo core này chỉ chứa CLI và graph engine; các provider AWS, Azure, GCP và khác là plugin riêng.