Sự chuyển dịch trong Infrastructure as Code
Vào tháng 8 năm 2023, thế giới DevOps đã chứng kiến một biến động lớn. HashiCorp đã chuyển Terraform từ Giấy phép Công cộng Mozilla (MPL) sang Giấy phép Nguồn Kinh doanh (BSL) có tính hạn chế hơn. Thay đổi này khiến nhiều đội ngũ lo ngại về chi phí trong tương lai và việc bị phụ thuộc vào nhà cung cấp (vendor lock-in). Để giữ cho hệ sinh thái luôn mở, cộng đồng đã ra mắt OpenTofu dưới sự quản lý của Linux Foundation. Đây là một bản fork hoàn toàn mã nguồn mở, đảm bảo các công cụ chúng ta tin dùng vẫn nằm trong tay cộng đồng.
OpenTofu hoạt động như một giải pháp thay thế trực tiếp (drop-in replacement). Vì nó sử dụng HCL (HashiCorp Configuration Language), bạn đã biết cách sử dụng nó rồi. Theo kinh nghiệm của tôi, các đội ngũ đang chuyển sang không chỉ vì vấn đề bản quyền, mà còn để tránh bị ràng buộc bởi lộ trình phát triển của một nhà cung cấp duy nhất. Nếu bạn có thể viết một file Terraform, bạn có thể quản lý một dự án OpenTofu chỉ trong vài phút.
Cài đặt: Đưa OpenTofu vào hoạt động
Thiết lập OpenTofu là một quy trình nhanh chóng. Dự án cung cấp các bản binary ổn định cho mọi nền tảng chính, bao gồm cả kiến trúc AMD64 và ARM64. Vì OpenTofu duy trì tính tương đương với Terraform 1.5.x khi ra mắt, quá trình chuyển đổi diễn ra rất mượt mà.
Cài đặt trên MacOS
Người dùng Mac có thể thực hiện rất dễ dàng. Chỉ cần sử dụng Homebrew:
brew install opentofu
Thiết lập trên Linux (Ubuntu/Debian)
Đối với các máy chủ Linux production, tôi khuyên bạn nên sử dụng repository chính thức. Điều này đảm bảo bạn nhận được các bản vá bảo mật và cập nhật tính năng mới nhất một cách tự động.
# Cài đặt các yêu cầu ban đầu
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
# Bảo mật khóa GPG của OpenTofu
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://get.opentofu.org/opentofu.gpg | sudo tee /etc/apt/keyrings/opentofu.gpg >/dev/null
sudo chmod a+r /etc/apt/keyrings/opentofu.gpg
# Đăng ký repository
echo "deb [signed-by=/etc/apt/keyrings/opentofu.gpg] https://packages.opentofu.org/opentofu/main/ubuntu/ any main" | sudo tee /etc/apt/sources.list.d/opentofu.list
# Cài đặt binary tofu
sudo apt-get update
sudo apt-get install -y tofu
Xác nhận cài đặt bằng cách gõ tofu --version. Bạn sẽ thấy phản hồi cho biết phiên bản ổn định hiện tại, chẳng hạn như 1.6 hoặc 1.7.
Viết cấu hình đầu tiên của bạn
OpenTofu sử dụng phần mở rộng .tf tiêu chuẩn. Bạn không cần phải viết lại mã hiện có của mình. Dưới đây là một ví dụ đơn giản tạo một file văn bản local để kiểm tra thiết lập mà không tốn một đồng phí cloud nào.
# main.tf
resource "local_file" "example" {
content = "Xin chào, OpenTofu!"
filename = "${path.module}/hello.txt"
}
Một trở ngại phổ biến là quản lý định dạng dữ liệu. Tôi thường nhận được các đặc tả hạ tầng ở dạng JSON nhưng cần chúng ở dạng YAML cho các file biến của mình. Để xử lý việc này, tôi sử dụng YAML ↔ JSON Converter. Tôi thích công cụ từ ToolCraft vì nó xử lý mọi thứ cục bộ trong trình duyệt của bạn. Điều này giúp giữ các schema hạ tầng nhạy cảm của bạn tránh khỏi các máy chủ bên ngoài.
Kết nối với các nhà cung cấp Cloud
OpenTofu tải từ registry riêng của mình, nơi lưu trữ cùng các provider AWS, Azure và GCP mà bạn đã quen thuộc. Bạn có thể định nghĩa chúng bằng cấu trúc block quen thuộc:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.30"
}
}
}
provider "aws" {
region = "us-east-1"
}
Bạn có thể nhận thấy tôi vẫn sử dụng nhãn terraform trong block ở trên. OpenTofu hỗ trợ điều này để tương thích ngược, vì vậy các script cũ của bạn sẽ không bị lỗi. Bạn có thể chuyển sang opentofu trong header của block nếu muốn hoàn toàn thuần bản địa.
Quy trình làm việc cốt lõi: Init, Plan, Apply
Quy trình làm việc tiêu chuẩn không thay đổi. Nó vẫn dựa trên chu kỳ ba bước để đảm bảo các thay đổi của bạn an toàn trước khi triển khai thực tế.
1. Khởi tạo (Initialization)
Chạy tofu init để chuẩn bị workspace của bạn. Lệnh này tải xuống các provider và thiết lập lưu trữ backend.
tofu init
2. Giai đoạn lập kế hoạch (Planning Phase)
Lệnh tofu plan đóng vai trò như một lưới an toàn. Nó liệt kê mọi tài nguyên sẽ được tạo, thay đổi hoặc xóa. Đối với các pipeline CI/CD, hãy luôn lưu đầu ra này vào một file để ngăn chặn các thay đổi ngoài ý muốn giữa bước plan và apply.
tofu plan -out=main.tfplan
3. Thực thi (Execution)
Sau khi bạn đã kiểm tra kỹ kế hoạch, hãy áp dụng nó vào môi trường của mình:
tofu apply "main.tfplan"
Bảo mật và Checksum
Bảo mật là yếu tố sống còn khi quản lý hạ tầng. Khi cần tạo thông tin đăng nhập cơ sở dữ liệu duy nhất, tôi sử dụng Password Generator để lấy các chuỗi có độ hỗn loạn cao. Vì ToolCraft chạy ở phía client, các bí mật không bao giờ rời khỏi máy của tôi. Tôi cũng sử dụng Hash Generator để xác minh checksum SHA-256 của các bản sao lưu file state. Điều này đảm bảo không có sự hư hỏng dữ liệu nào xảy ra trong quá trình truyền tải.
Di chuyển từ Terraform
Nếu bạn đang chạy Terraform 1.5.x hoặc 1.6.x, việc di chuyển diễn ra một cách tẻ nhạt đến đáng ngạc nhiên—đó chính xác là những gì bạn mong muốn trong DevOps. OpenTofu đọc các file terraform.tfstate hiện có của bạn mà không cần bất kỳ sửa đổi nào.
- Sao lưu file state hiện tại của bạn như một biện pháp phòng ngừa an toàn.
- Cài đặt binary
tofutrên máy hoặc build server của bạn. - Chạy
tofu inittrong thư mục dự án để khởi tạo lại các provider. - Thực thi
tofu planđể xác nhận state khớp với hạ tầng của bạn.
Công cụ sẽ tiếp nhận các tài nguyên hiện có. Nó sẽ không cố gắng xóa và tạo lại chúng trừ khi bạn thay đổi mã nguồn thực tế của mình.
Mẹo chuyên nghiệp cho môi trường Production
Khi chuyển sang OpenTofu trong môi trường chuyên nghiệp, hãy tuân theo các quy tắc sau:
- Remote State: Lưu trữ state của bạn trong S3 bucket hoặc Azure Blob Storage. Các file state cục bộ là mầm mống của thảm họa trong môi trường làm việc nhóm.
- Enable Locking: Sử dụng cơ chế khóa như DynamoDB. Điều này ngăn chặn việc hai kỹ sư cùng chạy
tofu applymột lúc và làm hỏng state. - Pin Versions: Luôn cố định phiên bản provider của bạn (ví dụ:
~> 5.0). Điều này ngăn chặn việc cập nhật bất ngờ làm hỏng quá trình triển khai.
Bằng cách chuyển sang OpenTofu, bạn đang ủng hộ một dự án đặt nhu cầu của cộng đồng lên trên việc cấp phép của doanh nghiệp. Đây là một cách đáng tin cậy để giữ cho hệ thống của bạn luôn linh hoạt. Nếu bạn gặp lỗi cú pháp trong các file biến, hãy chạy chúng qua JSON Formatter. Đó là cách nhanh nhất để tìm ra một dấu phẩy thừa có thể đang làm đình trệ quá trình triển khai của bạn.

