Danh sách bài viết trong series Terraform Associate (003)
- Bài 0: Giới Thiệu Series Và Tổng Quan Về Chứng Chỉ Terraform Associate (003)
- Bài 1: Terraform Là Gì? Tổng Quan Và Vai Trò Trong IaC
- Bài 2: Cài Đặt Terraform Trên Các Hệ Điều Hành
- Bài 3: Terraform Workflow: Init, Plan, Apply, Destroy
- Bải 4: Terraform CLI Nâng Cao: Lệnh Taint, Import, Refresh
- Bài 5: Quản Lý Provider Trong Terraform
- Bài 6: Quản Lý Resource Trong Terraform
- Bài 7: Sử Dụng Biến (Variables) Trong Terraform
- Bài 8: Sử Dụng Output Trong Terraform
- Bài 9: Hiểu Terraform State Quản Lý Trạng Thái Hạ Tầng
- Bài 10: Sử Dụng Remote State Với Backend Như S3 Trong Terraform
- Bài 11: Terraform Workspace Quản Lý Nhiều Môi Trường
- Bài 12: Terraform Module: Mô-đun Hóa Cấu Hình
- Bài 13: Terraform Data Sources Truy Vấn Thông Tin Hạ Tầng
- Bài 14: Quản Lý Vòng Đời Tài Nguyên Với Terraform
- Bài 15: Tự Động Hóa Và Tích Hợp CI/CD Với Terraform
- Bài 16: Xử Lý Lỗi Và Debug Trong Terraform
- Bài 17: Tối Ưu Hóa Hiệu Suất Với Terraform
- Bài 18: Bảo Mật Cấu Hình Terraform
- Bài 19: Triển Khai Hạ Tầng Đa Vùng Với Terraform
- Bài 20: Triển Khai Hạ Tầng Serverless Với Terraform
- Bài 21: Triển Khai Hạ Tầng Container Với Terraform (ECS, EKS)
- Bài 22: Triển Khai Hạ Tầng Multi-Cloud Với Terraform
- Bài 23: Tổng Kết Series Và Chuẩn Bị Cho Kỳ Thi Terraform Associate (003)
Triển Khai Đa Vùng Trong Terraform Là Gì?

Triển khai đa vùng (multi-region) trong Terraform là quá trình sử dụng Terraform để triển khai và quản lý hạ tầng trên nhiều khu vực địa lý (regions) của nhà cung cấp dịch vụ đám mây (VD: AWS regions như us-east-1
, us-west-2
). Mục tiêu là tăng tính khả dụng (high availability) và khả năng chịu lỗi (fault tolerance) của hệ thống, đảm bảo dịch vụ không bị gián đoạn nếu một region gặp sự cố. Terraform hỗ trợ triển khai đa vùng bằng cách sử dụng nhiều provider hoặc module cho từng region. Đây là một kỹ năng thực tiễn hữu ích cho kỳ thi Terraform Associate (003), liên quan đến mục tiêu 7 (Read, Generate, and Modify Configuration).
Tại Sao Cần Triển Khai Đa Vùng?
- Tăng tính khả dụng: Đảm bảo hệ thống vẫn hoạt động nếu một region bị downtime.
- Giảm độ trễ (latency): Đặt tài nguyên gần người dùng cuối (VD: triển khai ở
us-east-1
vàeu-west-1
). - Chịu lỗi tốt hơn: Phân tán tài nguyên để giảm rủi ro từ lỗi hệ thống hoặc thiên tai.
- Tuân thủ quy định: Một số khu vực yêu cầu dữ liệu được lưu trữ cục bộ (VD: GDPR ở EU).
- Cân bằng tải: Sử dụng tài nguyên ở nhiều region để xử lý lưu lượng lớn.
Cách Triển Khai Hạ Tầng Đa Vùng Với Terraform
Sử Dụng Nhiều Provider Theo Vùng
Terraform cho phép khai báo nhiều provider với các region khác nhau bằng cách sử dụng alias.
-
Ví dụ:
provider "aws" { alias = "us_east_1" region = "us-east-1" } provider "aws" { alias = "us_west_2" region = "us-west-2" }
- Ý nghĩa: Mỗi provider sẽ quản lý tài nguyên trong region tương ứng.
Quản Lý Tài Nguyên Đa Vùng
- Sử dụng alias của provider để chỉ định region cho tài nguyên.
-
Ví dụ:
resource "aws_instance" "east_server" { provider = aws.us_east_1 ami = "ami-0c55b159cbfafe1f0" instance_type = "t2.micro" tags = { Name = "EastServer" } } resource "aws_instance" "west_server" { provider = aws.us_west_2 ami = "ami-0abcdef1234567890" instance_type = "t2.micro" tags = { Name = "WestServer" } }
Đồng Bộ State Đa Vùng
- Sử dụng remote state để quản lý state tập trung.
- File
main.tf
:terraform { backend "s3" { bucket = "my-terraform-state" key = "state/multi-region.tfstate" region = "us-east-1" dynamodb_table = "terraform-locks" encrypt = true } }
- Ý nghĩa: Một file state duy nhất lưu trữ trạng thái của tất cả các region.
Ví Dụ Thực Tế: Triển Khai EC2 Đa Vùng Trên AWS
-
File
main.tf
:terraform { backend "s3" { bucket = "my-terraform-state" key = "state/multi-region.tfstate" region = "us-east-1" dynamodb_table = "terraform-locks" encrypt = true } } provider "aws" { alias = "us_east_1" region = "us-east-1" } provider "aws" { alias = "us_west_2" region = "us-west-2" } data "aws_ami" "latest_amazon_linux_east" { provider = aws.us_east_1 most_recent = true owners = ["amazon"] filter { name = "name" values = ["amzn2-ami-hvm-*-x86_64-gp2"] } } data "aws_ami" "latest_amazon_linux_west" { provider = aws.us_west_2 most_recent = true owners = ["amazon"] filter { name = "name" values = ["amzn2-ami-hvm-*-x86_64-gp2"] } } resource "aws_instance" "east_server" { provider = aws.us_east_1 ami = data.aws_ami.latest_amazon_linux_east.id instance_type = "t2.micro" tags = { Name = "EastServer" } } resource "aws_instance" "west_server" { provider = aws.us_west_2 ami = data.aws_ami.latest_amazon_linux_west.id instance_type = "t2.micro" tags = { Name = "WestServer" } } output "east_instance_id" { value = aws_instance.east_server.id } output "west_instance_id" { value = aws_instance.west_server.id } output "east_instance_public_ip" { value = aws_instance.east_server.public_ip } output "west_instance_public_ip" { value = aws_instance.west_server.public_ip }
-
Quy trình:
-
Khởi tạo backend:
terraform init
Output:
Initializing the backend... Successfully configured the backend "s3"! Terraform will automatically use this backend unless the backend configuration changes. Terraform has been successfully initialized!
-
Áp dụng cấu hình:
terraform apply -auto-approve
Output:
data.aws_ami.latest_amazon_linux_east: Reading... data.aws_ami.latest_amazon_linux_east: Read complete after 2s [id=ami-0c55b159cbfafe1f0] data.aws_ami.latest_amazon_linux_west: Reading... data.aws_ami.latest_amazon_linux_west: Read complete after 2s [id=ami-0abcdef1234567890] aws_instance.east_server: Creating... aws_instance.west_server: Creating... aws_instance.east_server: Creation complete after 45s [id=i-0east123456789] aws_instance.west_server: Creation complete after 45s [id=i-0west987654321] Apply complete! Resources: 2 added, 0 changed, 0 destroyed. Outputs: east_instance_id = "i-0east123456789" west_instance_id = "i-0west987654321" east_instance_public_ip = "54.123.45.67" west_instance_public_ip = "34.567.89.12"
- Kiểm tra tài nguyên trên AWS:
- EC2 instance
EastServer
được tạo ởus-east-1
. - EC2 instance
WestServer
được tạo ởus-west-2
.
- EC2 instance
-
Lưu Ý Quan Trọng Khi Triển Khai Đa Vùng
- Kiểm tra AMI theo region: AMI ID khác nhau giữa các region, luôn sử dụng
data "aws_ami"
để truy vấn. - Chi phí tăng: Triển khai đa vùng có thể làm tăng chi phí (VD: phí truyền dữ liệu giữa các region).
- Đồng bộ state: Đảm bảo file state được lưu trữ an toàn trên S3, tránh xung đột khi nhiều region cùng truy cập.
- Quyền truy cập: Cấu hình IAM role cho phép Terraform quản lý tài nguyên ở tất cả các region.
- Kiểm tra độ trễ: Đảm bảo ứng dụng tận dụng được lợi ích của đa vùng (VD: dùng Route 53 để định tuyến).
Liên Hệ Với Chứng Chỉ Terraform Associate (003)
Kỳ thi Terraform Associate (003) không kiểm tra trực tiếp triển khai đa vùng, nhưng hiểu cách quản lý tài nguyên trên nhiều region sẽ giúp bạn áp dụng kiến thức thực tiễn vào mục tiêu 7 và 8. Bạn cần nắm:
- Khái niệm liên quan:
- Sử dụng nhiều provider với alias.
- Quản lý tài nguyên với các tham số khác nhau theo region.
- Thực hành: Biết cách triển khai đa vùng sẽ giúp bạn xử lý tốt hơn trong các tình huống thực tế.
Kết Luận
Triển khai hạ tầng đa vùng với Terraform là một chiến lược quan trọng để tăng tính khả dụng và khả năng chịu lỗi. Sử dụng nhiều provider, truy vấn AMI theo region, và quản lý state tập trung sẽ giúp bạn xây dựng hệ thống mạnh mẽ hơn. Dù không phải trọng tâm của kỳ thi Terraform Associate (003), kỹ năng này rất hữu ích trong thực tế. Ở bài tiếp theo, chúng ta sẽ tìm hiểu cách sử dụng Terraform để triển khai hạ tầng không serverless.