Bài viết này sẽ hướng dẫn Quý Khách cách tạo và cấu hình Automation bằng OpenTofu, giúp việc triển khai và quản lý các Instances trên Cloud Gen 4 trở nên đơn giản và hiệu quả hơn. Trước tiên, để sử dụng được tính năng này, Quý Khách cần chuẩn bị API Key và Secret Key từ tài khoản Cloud Gen 4 trên vHost. Quý khách có thể tham khảo hướng dẫn tạo và lấy API Key tại Cloud Gen 4 của vHost tại đây.
Sau khi đã có API Key và Secret Key, vHost sẽ tiếp tục hướng dẫn Quý Khách cách sử dụng chúng để triển khai tính năng Automation bằng OpenTofu trên Cloud Gen 4.
1. Opentofu #
1.1. Giới thiệu về Opentofu #
OpenTofu là một công cụ mã nguồn mở, được phát triển như một nhánh từ Teraform sau khi Terraform thay đổi giấy phép. Tương tự như Terraform, OpenTofu được sử dụng để tự động hóa việc triển khai và quản lý hạ tầng dưới dạng mã (Infrastructure as Code – IaC).
Người dùng có thể định nghĩa và triển khai hạ tầng trên nhiều nền tảng khác nhau thông qua các tệp cấu hình, giúp cho việc quản lý hạ tầng trở nên dễ dàng, đồng bộ và có thể kiểm soát.
1.2. Các tính năng của OpenTofu #
Infrastructure as Code (IaC): Cho phép mô tả hạ tầng bằng mã trong các tệp cấu hình với cú pháp HCL (HashiCorp Configuration Language), dễ dàng kiểm soát, lưu trữ và phiên bản hóa.
Quản lý đa nền tảng: OpenTofu hỗ trợ nhiều nhà cung cấp dịch vụ (providers), trong đó có vHost Cloud, giúp triển khai hạ tầng trên các hệ thống đám mây hoặc môi trường khác nhau.
Tự động hóa tài nguyên: Người dùng có thể tạo, thay đổi hoặc hủy bỏ tài nguyên (máy chủ, mạng, firewall, ổ đĩa…) một cách tự động mà không cần thao tác thủ công.
Quản lý trạng thái: OpenTofu lưu trữ trạng thái của hạ tầng trong tệp state, so sánh sự khác biệt giữa mô tả cấu hình và thực tế, từ đó áp dụng các thay đổi cần thiết.
1.3 Sự khác biệt giữa Terraform và OpenTofu #
Bảng dưới đây tóm tắt sự khác biệt giữa OpenTofu và Terraform.
Tiêu chí | Terraform | OpenTofu |
Nguồn gốc | Do HashiCorp phát triển, ra mắt từ 2014 | Đây là fork của Terraform, do Linux Foundation và cộng đồng phát triển (2023) |
Giấy phép | BSL (Business Source License) không còn mở hoàn toàn. | Giữ mã nguồn mở 100% theo MPL (Mozilla Public License) |
Cộng đồng | Chủ yếu do HashiCorp kiểm soát, cộng đồng đóng góp hạn chế. | Do cộng đồng dẫn dắt, mọi người có thể tham gia phát triển và định đướng. |
Tính năng nổi bật | iaC, quản lý đa nền tảng, state management….nhưng chậm bổ xung tính năng mới. | Tích hợp nhanh các yêu cầu cộng đồng |
Hệ sinh thái | Rất lớn, nhiều tài liệu, nhiều provider lâu đời | Đang phát triển, kế thừa provider từ Terraform, cộng đồng bổ sung nhanh |
Định hướng phát triển | Ổn định, phù hợp cho doanh nghiệp lớn, nhưng phụ thuộc vào HashiCorp | Minh bạch, ưu tiên phản hồi người dùng, hướng mở và linh hoạt. |
Khả năng tương thích | Nền tảng gốc, ổn định, nhiều provider chính thức | Tương thích ngược với Terraform, có thể dùng lại hầu hết cầu hình Terraform. |
2. Hướng dẫn cài đặt Opentofu trên Ubuntu 22.4 #
a. Cài đặt Screen để lưu tiến trình chạy nền
wget https://vhost.vn/tmp/screenrc
mv screenrc .screenrc
screen -a
b. Cập nhật hệ thống và cài các gói cần thiết
sudo apt-get update<br>sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
c. Tạo thư mục lưu trữ GPG keys
sudo install -m 0755 -d /etc/apt/keyrings
d. Tải và thêm GPG key của OpenTofu
curl -fsSL https://packages.opentofu.org/opentofu/tofu/gpgkey | sudo gpg --dearmor -o /etc/apt/keyrings/opentofu.gpg<br>sudo chmod a+r /etc/apt/keyrings/opentofu.gpg
e. Thêm repository của OpenTofu vào APT source list
echo "deb [signed-by=/etc/apt/keyrings/opentofu.gpg] https://packages.opentofu.org/opentofu/tofu/any/ any main" | sudo tee /etc/apt/sources.list.d/opentofu.list<br>echo "deb-src [signed-by=/etc/apt/keyrings/opentofu.gpg] https://packages.opentofu.org/opentofu/tofu/any/ any main" | sudo tee -a /etc/apt/sources.list.d/opentofu.list
f. Cài đặt OpenTofu
sudo apt-get update<br>sudo apt-get install -y tofu
g. Kiểm tra phiên bản sau khi cài đặt
tofu --version

3. Hướng dẫn kết nối đến Cloud Gen 4 #
Đầu tiên Quý Khách phải có Api và Secret Key trên tài khoản Cloud Gen 4 của vHost, Quý Khách có thể tham khảo bài viết hướng dẫn tại đây.
Để OpenTofu có thể triển khai các tài nguyên cho Quý Khách, Quý Khách cần tạo các tệp cấu hình để mô tả hạ tầng của Quý Khách. Trong tệp này, Quý Khách sẽ định nghĩa các tài nguyên như: máy chủ, cơ sở dữ liệu, mạng và các dịch vụ khác mà Quý Khách muốn triển khai trên Cloud Gen 4 của vHost.
Tạo thư mục để quản lí các file cấu hình:
mkdir ~/opentofu-cloudstack
cd ~/opentofu-cloudstack
Tạo file main.tf dùng để kết nối api với Cloud gen 4 của vHost, dùng để định nghĩa nhà cung cấp dịch vụ, cách xác thực và cho phép quản lý hạ tầng trên Cloud Gen 4 bằng mã.
Thông tin sau:
terraform {
required_providers {
cloudstack = {
source = "cloudstack/cloudstack"
version = "0.5.0"
}
}
}
provider "cloudstack" {
api_url = var.api_url
api_key = var.api_key
secret_key = var.secret_key
}
Ý nghĩa: OpenTofu sẽ tải provider CloudStack phiên bản 0.5.0 để có thể giao tiếp với API Cloud Gen 4.
Tiếp đến khai báo giá trị cho các biến trong file terraform.tfvars
api_url = "http://<IP của Cloud Gen 4>:8080/client/api"
api_key = "pEEFOYF3R6y4…"
secret_key = "vQIYfblaGYyKQ…"
zone = "vietnam"
vm_name = "<Tên VM>"
service_offering = "<Chọn cấu hình>"
template_name = "Ubuntu 24.04"
network_id = "<Id network>"
vm_password = "<Password của VM sau khi tạo>"
Tạo file vm.tf để định nghĩa resource trong opentofu để tạo một máy ảo VM trên Cloud Gen 4 tại vHost.
resource "cloudstack_instance" "vm1" {
name = var.vm_name
service_offering = var.service_offering
template = var.template_name
network_id = var.network_id
zone = var.zone
expunge = true
user_data = base64encode(<<-EOT
#!/bin/bash
echo 'root:${var.vm_password}' | chpasswd
EOT
)
}
Tạo file varibles.tf
variable "api_url" {
description = "CloudStack API endpoint"
type = string
}
variable "api_key" {
description = "CloudStack API key"
type = string
}
variable "secret_key" {
description = "CloudStack Secret key"
type = string
}
variable "zone" {
type = string
description = "CloudStack Zone name"
}
variable "service_offering" {
type = string
description = "Instance size"
}
variable "template_name" {
type = string
description = "Template of the VM:"
}
variable "vm_name" {
type = string
description = "Name of the VM"
}
variable "network_id" {
description = "Network ID to attach the VM"
type = string
}
variable "vm_password" {
description = "Root password for VM"
type = string
sensitive = true
}
variable "vm_id" {
description = "ID của VM cần quản lý/xoá"
type = string
default = ""
}
Tạo file Output.tf
output "vm_id" {
value = cloudstack_instance.vm1.id
}
output "vm_name" {
value = cloudstack_instance.vm1.name
}
output "vm_password" {
value = var.vm_password
sensitive = true
}
output "imported_vm_id" {
value = cloudstack_instance.vm1.id
}
output "imported_vm_name" {
value = cloudstack_instance.vm1.name
}
Chạy thực hiện:
tofu init
tofu plan
tofu validate
tofu apply
tofu apply -auto-approve

Xem cấu hình VM đã tạo:

Truy cập vào VM


Cách Xóa 1 VM:
tofu destroy -target=cloudstack_instance.vm1 -auto-approve



4. Tổng kết #
Việc áp dụng OpenTofu giúp Quý Khách tự động hoá quá trình triển khai và quản lý Cloud Gen 4 một cách nhanh chóng, chính xác và nhất quán.
Nếu Quý Khách hàng có thắc mắc gì trong quá trình thực hiện, Quý Khách có thể liên hệ qua các kênh sau:
- Tổng đài hỗ trợ khách hàng: 19006806 – phím 2
- Email: support@vHost.vn
- Ticket: https://members.vhost.vn/tickets/new/
Nếu Quý Khách có bất kỳ câu hỏi hoặc phản hồi nào, hãy để lại bình luận bên dưới.