Quay lại

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    comment-3 Created with Sketch Beta. 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)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday