Bài 6: Quản lý nhiều môi trường với Terraform Workspace Chuyên mục Devops 2025-05-15 0 Lượt xem 0 Lượt thích 0 Bình luận
✨ Giới thiệu
Trong thực tế, hầu hết các dự án phần mềm đều có nhiều môi trường: development, staging, và production. Mỗi môi trường có cấu hình và dữ liệu khác nhau. Nếu không có cách tổ chức tốt, việc quản lý sẽ trở nên hỗn loạn.
👉 Terraform Workspace chính là công cụ giúp chúng ta giải quyết bài toán đó một cách hiệu quả, gọn gàng, và an toàn.
📌 Terraform Workspace là gì?
Mặc định, khi bạn khởi tạo Terraform, nó hoạt động trong workspace có tên là default.
Tuy nhiên, Terraform cho phép bạn tạo nhiều workspace để duy trì các state khác nhau cho cùng một cấu trúc mã hạ tầng (infrastructure code). Mỗi workspace có terraform state riêng biệt, nên bạn có thể triển khai các môi trường khác nhau (dev, staging, prod) từ cùng một tập mã Terraform.
🏗 Cấu trúc thư mục mẫu
Giả sử bạn muốn quản lý một hệ thống EC2 cho nhiều môi trường. Bạn có thể tổ chức cấu trúc thư mục như sau:
terraform-ec2-multi-env/
├── main.tf
├── variables.tf
├── outputs.tf
├── terraform.tfvars # có thể bỏ, vì ta sẽ dùng *.tfvars riêng
└── envs/
├── dev.tfvars
├── stage.tfvars
└── prod.tfvars
Mỗi file .tfvars chứa biến riêng cho từng môi trường, ví dụ:
envs/dev.tfvars
instance_type = "t2.micro"
instance_name = "dev-instance"
envs/prod.tfvars
instance_type = "t3.medium"
instance_name = "prod-instance"
⚙️ Khởi tạo workspace
Chạy các lệnh sau để tạo workspace tương ứng:
terraform workspace new dev
terraform workspace new stage
terraform workspace new prod
🔍 Kiểm tra workspace hiện tại:
terraform workspace show
🔄 Chuyển workspace:
terraform workspace select prod
🧪 Lab thực hành: Tạo EC2 riêng cho từng môi trường
1. main.tf
provider "aws" {
region = var.region
}
resource "aws_instance" "app" {
ami = var.ami_id
instance_type = var.instance_type
tags = {
Name = var.instance_name
Env = terraform.workspace
}
}
2. variables.tf
variable "region" {
default = "us-east-1"
}
variable "ami_id" {
default = "ami-026c39f4021df9abe" # thay bằng AMI phù hợp
}
variable "instance_type" {}
variable "instance_name" {}
3. envs/dev.tfvars
instance_type = "t2.micro"
instance_name = "dev-ec2"
4. envs/prod.tfvars
instance_type = "t3.medium"
instance_name = "prod-ec2"
✅ Thực thi
terraform init
# Chọn môi trường
terraform workspace select dev
# Apply theo môi trường
terraform apply -var-file="envs/dev.tfvars"
# Sau đó chuyển môi trường
terraform workspace select prod
terraform apply -var-file="envs/prod.tfvars"
Kết quả: bạn sẽ có 2 EC2 khác nhau chạy trên cùng một vùng nhưng gắn nhãn (tag) dev hoặc prod tương ứng.
🎯 Lợi ích khi dùng Workspace
Tính năng | Lợi ích |
---|---|
Tách biệt state | Không xung đột giữa môi trường |
Dễ rollback | Có thể xóa / revert từng môi trường |
Tái sử dụng code | Một lần viết – dùng nhiều nơi |
Gọn gàng, chuyên nghiệp | Dễ bảo trì và mở rộng |
🚫 Khi nào KHÔNG nên dùng workspace?
-
Khi bạn muốn triển khai nhiều môi trường song song (ví dụ dev, staging, prod chạy CI/CD song song).
-
Khi bạn cần state file tách biệt tuyệt đối và tự động hóa deploy qua môi trường.
👉 Lúc đó, nên dùng multi-folder hoặc multi-backend (S3 + DynamoDB) với các pipeline riêng biệt.
📝 Tổng kết
-
Terraform Workspace giúp tách biệt cấu hình và trạng thái giữa nhiều môi trường.
-
Giúp quản lý hạ tầng an toàn, dễ mở rộng, dễ duy trì.
-
Bạn có thể dễ dàng mở rộng workspace kết hợp với module, backend, và CI/CD.
📚 Bài tiếp theo?
👉 Bài 7 sẽ là bài Lab thực tế kết hợp Terraform Workspace với RDS – triển khai database tách biệt theo từng môi trường dev, stage, prod.
Bình luận (0)