Bài 19: Triển Khai Hạ Tầng Đa Vùng Với Terraform


Danh sách bài viết trong series Terraform Associate (003)

Triển Khai Đa Vùng Trong Terraform Là Gì?

5237c39c-d083-4e00-b708-3e765306cfec

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-1eu-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:

    1. 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!
    2. Á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"
    3. 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.

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.

Điều hướng chuỗi bài viết<< Bài 18: Bảo Mật Cấu Hình Terraform
>> Bài 20: Triển Khai Hạ Tầng Serverless Với Terraform
Article Thumbnail
Datadog Webinar: Modernize AWS Logs at Scale
Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận