Bài 7: Bài lab triển khai RDS với Terraform Workspace – Dev, Stage, Prod hiệu quả Chuyên mục Devops 2025-05-15 1 Lượt xem 1 Lượt thích 0 Bình luận
🎯 Mục tiêu
-
Tạo một hệ thống RDS (MySQL hoặc PostgreSQL) sử dụng Terraform.
-
Quản lý nhiều môi trường (dev, stage, prod) bằng workspace.
-
Mỗi môi trường sẽ có database instance riêng, cấu hình riêng.
-
State được tách biệt tự động, không ảnh hưởng lẫn nhau.
🧱 Cấu trúc thư mục
terraform-rds-lab-workspace/
├── main.tf
├── variables.tf
├── outputs.tf
├── envs/
│ ├── dev.tfvars
│ ├── stage.tfvars
│ └── prod.tfvars
📦 1. File variables.tf
variable "region" {
default = "us-east-1"
}
variable "db_engine" {
default = "mysql"
}
variable "db_engine_version" {
default = "8.0"
}
variable "instance_class" {}
variable "db_name" {}
variable "username" {}
variable "password" {}
⚙️ 2. File main.tf
provider "aws" {
region = var.region
}
resource "aws_db_instance" "rds" {
identifier = "${terraform.workspace}-rds-instance"
allocated_storage = 20
engine = var.db_engine
engine_version = var.db_engine_version
instance_class = var.instance_class
db_name = var.db_name
username = var.username
password = var.password
skip_final_snapshot = true
publicly_accessible = true
tags = {
Environment = terraform.workspace
}
}
❗ Ghi chú:
-
skip_final_snapshot = true chỉ dùng trong lab/dev. Prod nên cấu hình backup chuẩn chỉnh.
-
Bạn có thể thêm parameter_group_name, vpc_security_group_ids, subnet_group_name… nếu muốn kiểm soát cao hơn.
📤 3. File outputs.tf
output "rds_endpoint" {
value = aws_db_instance.rds.endpoint
}
📂 4. Các file biến môi trường (envs/*.tfvars)
envs/dev.tfvars
instance_class = "db.t3.micro"
db_name = "dev_db"
username = "devuser"
password = "devpassword123"
envs/stage.tfvars
instance_class = "db.t3.small"
db_name = "stage_db"
username = "stageuser"
password = "stagepassword123"
envs/prod.tfvars
instance_class = "db.t3.medium"
db_name = "prod_db"
username = "produser"
password = "prodpasswordSecure!"
🛠 5. Khởi tạo và tạo workspace
terraform init
terraform workspace new dev
terraform workspace new stage
terraform workspace new prod
🚀 6. Triển khai từng môi trường
✅ Môi trường Dev:
terraform workspace select dev
terraform apply -var-file="envs/dev.tfvars"
✅ Môi trường Stage:
terraform workspace select stage
terraform apply -var-file="envs/stage.tfvars"
✅ Môi trường Prod:
terraform workspace select prod
terraform apply -var-file="envs/prod.tfvars"
💡 Mỗi workspace sẽ có một state riêng nằm trong thư mục .terraform/terraform.tfstate.d/{workspace}/terraform.tfstate.
🔍 Kiểm tra kết quả
Bạn có thể thấy endpoint RDS trong output sau khi apply:
Apply complete! Resources: 1 added.
Outputs:
rds_endpoint = "dev-rds-instance.xxxxxx.us-east-1.rds.amazonaws.com:3306"
Vào AWS Console → RDS → chọn instance theo tag Environment để xem thông tin chi tiết.
🧠 Tổng kết & Bài học
✅ Điều bạn học được | 📌 Mô tả |
---|---|
Workspace | Quản lý nhiều môi trường với state tách biệt |
Tái sử dụng mã | Một file cấu hình, deploy được nhiều môi trường |
Quản lý biến | Sử dụng .tfvars để thay đổi thông số |
Bảo mật | Tách password từng môi trường, có thể thêm secrets manager |
🚀 Nâng cao (tuỳ chọn mở rộng):
-
Kết hợp với RDS Subnet Group, Security Group riêng cho từng môi trường.
-
Dùng remote backend S3 + DynamoDB để lưu state tập trung.
-
Kết hợp với CI/CD (GitHub Actions, GitLab CI, Jenkins…) để tự động deploy từng môi trường.
Bình luận (0)