Amazon Aurora MySQL Bài 7: Khởi tạo cụm Aurora MySQL đầu tiên trên AWS Console hoặc qua Terraform
Sau khi đã nắm vững kiến trúc và bài toán chi phí, bước thực hành thiết thực nhất là dựng lên một cụm Aurora MySQL hoàn chỉnh. Đối với một Backend Engineer, việc thành thạo cả hai phương diện: Giao diện quản trị (AWS Console) và Mã nguồn cơ sở hạ tầng (Terraform - IaC) là kỹ năng bắt buộc.
Bài viết này sẽ hướng dẫn chi tiết cách triển khai cụm Aurora MySQL chuẩn chỉnh cho môi trường thực tế.
Phần 1: Khởi tạo qua AWS Console (Dành cho việc thử nghiệm nhanh)
Nếu bạn muốn làm quen trực quan với các thông số của Aurora, AWS Console là bước đệm tốt. Hãy thực hiện theo các bước sau:
-
Truy cập dịch vụ RDS:
- Đăng nhập vào AWS Console, tìm kiếm dịch vụ Amazon RDS và chuyển sang giao diện quản lý.
-
Bắt đầu tạo cơ sở dữ liệu:
-
Nhấn Create database.
-
Chọn phương thức Standard create để có toàn quyền tùy chỉnh cấu hình mạng và bảo mật.
-
-
Chọn Engine và Template:
-
Tại phần Engine options, chọn Amazon Aurora.
-
Tại phần Edition, chọn Amazon Aurora MySQL-Compatible Edition (chọn phiên bản engine phù hợp, ví dụ MySQL 3.x tương thích MySQL 8.0).
-
Tại phần Templates, chọn Production (tự động tạo cụm Multi-AZ gồm 1 Writer và 1 Reader) hoặc Dev/Test (tạo 1 instance đơn lẻ để tiết kiệm chi phí).
-
-
Cấu hình định danh (Settings):
- Đặt tên cụm (
DB cluster identifier), tên tài khoản quản trị (Master username) và mật khẩu (Master password).
- Đặt tên cụm (
-
Cấu hình Instance & Lưu trữ:
-
Chọn loại instance phù hợp ở phần Instance configuration (Ví dụ:
db.r6g.large). -
Lưu ý: Với Aurora, bạn không cần chọn dung lượng ổ cứng vì hệ thống tự động scale (Storage Auto-Scaling).
-
-
Kết nối mạng và Bảo mật (Connectivity):
-
Chọn VPC hiện tại của bạn.
-
Chọn Subnet group (nên có các subnet ở ít nhất 3 Availability Zones).
-
Cấu hình Public access thành
No(bảo mật tuyệt đối, chỉ cho phép các service trong VPC hoặc qua VPN/Bastion Host kết nối vào). -
Chọn VPC Security Group phù hợp (cho phép cổng
3306).
-
-
Advanced configurations:
-
Đặt tên Database khởi tạo ban đầu (
Initial database name). -
Cấu hình Backup retention period (ví dụ: giữ backup tự động trong 7 ngày).
-
-
Nhấn Create database và chờ khoảng 5-10 phút để AWS khởi tạo toàn bộ cụm cluster phân tán.
Phần 2: Khởi tạo tự động hóa qua Terraform (Chuẩn Production)
Trong môi trường doanh nghiệp (như tại Hasaki hoặc các hệ thống lớn), việc click trên Console là điều tối kỵ vì không thể kiểm soát version hay tái lập (reproduce). Chúng ta sử dụng Terraform để khai báo mã nguồn hạ tầng.
Dưới đây là đoạn script Terraform chuẩn để dựng một cụm Aurora MySQL v3 (MySQL 8.0 tương thích):
Terraform
# 1. Tạo DB Subnet Group chứa các subnet thuộc các AZ khác nhau
resource "aws_db_subnet_group" "aurora_subnet_group" {
name - "aurora-mysql-subnet-group"
subnet_ids - [aws_subnet.subnet_az1.id, aws_subnet.subnet_az2.id, aws_subnet.subnet_az3.id]
tags = {
Environment - "production"
ManagedBy - "Terraform"
}
}
# 2. Tạo Aurora Cluster (Cụm tổng quản lý storage và cấu hình chung)
resource "aws_rds_cluster" "aurora_cluster" {
cluster_identifier - "hieu-aurora-mysql-cluster"
engine - "aurora-mysql"
engine_version - "8.0.mysql_aurora.3.04.0" # Chọn version cụ thể
database_name - "hieu_ecommerce"
master_username - "admin_hieu"
master_password - "SuperSecretPassword123!" # Thực tế nên dùng AWS Secrets Manager
db_subnet_group_name - aws_db_subnet_group.aurora_subnet_group.name
vpc_security_group_ids - [aws_security_group.db_sg.id]
# Cấu hình backup và bảo mật
backup_retention_period - 7
preferred_backup_window - "18:00-19:00"
skip_final_snapshot - false
final_snapshot_identifier - "hieu-aurora-cluster-final-snapshot"
storage_encrypted - true
# Cho phép xóa hoặc scale dễ dàng hơn trong môi trường dev/staging
apply_immediately - true
}
# 3. Tạo Writer Instance (Compute node chịu trách nhiệm ghi)
resource "aws_rds_cluster_instance" "aurora_writer" {
identifier - "hieu-aurora-writer"
cluster_identifier - aws_rds_cluster.aurora_cluster.id
instance_class - "db.r6g.large"
engine - aws_rds_cluster.aurora_cluster.engine
engine_version - aws_rds_cluster.aurora_cluster.engine_version
db_subnet_group_name - aws_db_subnet_group.aurora_subnet_group.name
}
# 4. Tạo Reader Instance (Compute node chia tải đọc, đặt ở AZ khác)
resource "aws_rds_cluster_instance" "aurora_reader" {
identifier - "hieu-aurora-reader"
cluster_identifier - aws_rds_cluster.aurora_cluster.id
instance_class - "db.r6g.large"
engine - aws_rds_cluster.aurora_cluster.engine
engine_version - aws_rds_cluster.aurora_cluster.engine_version
db_subnet_group_name - aws_db_subnet_group.aurora_subnet_group.name
}
Góc nhìn vận hành cho Backend Engineer
-
Quản lý mật khẩu an toàn: Tuyệt đối không hardcode mật khẩu
master_passwordtrực tiếp trong file Terraform (.tf). Trong môi trường thực tế, hãy tích hợp với AWS Secrets Manager hoặc truyền qua biến môi trường bảo mật (TF_VAR_db_password). -
Lưu ý Security Group: Hãy chắc chắn rằng Security Group của Aurora chỉ cho phép port
3306kết nối từ Security Group của các con EC2 Backend, ECS Task hoặc Kubernetes Pod của bạn, tuyệt đối không mở0.0.0.0/0ra internet công cộng.
All rights reserved