0
0
Lập trình
TT

Hướng dẫn chi tiết về Terraform Backend: Tối ưu hóa quản lý trạng thái cơ sở hạ tầng

Đăng vào 2 tuần trước

• 4 phút đọc

Giới thiệu về Terraform Backend

Terraform là công cụ phổ biến giúp quản lý cơ sở hạ tầng một cách tự động hóa, tuy nhiên, việc lưu trữ trạng thái (state) là một vấn đề quan trọng mà người dùng cần lưu ý đặc biệt khi có nhiều người cùng làm việc. Trong bài viết này, chúng ta sẽ tìm hiểu về backend trong Terraform - một tính năng giúp quản lý trạng thái của cơ sở hạ tầng.

Vấn đề gặp phải

Terraform quản lý infrastructure thông qua một file trạng thái gọi là terraform.tfstate. Nếu chỉ làm việc một mình, việc này sẽ không gây ra vấn đề gì. Nhưng khi có nhiều người tham gia xây dựng và quản lý, điều này có thể dẫn đến xung đột trong trạng thái.

Giải pháp: Sử dụng Backend

Để giải quyết những xung đột này, Terraform cung cấp backend block - một công cụ cho phép cấu hình vị trí lưu trữ state.

Khai báo Backend trong File Config

Để cấu hình backend, bạn cần thêm backend block vào trong terraform block như sau:

hcl Copy
terraform {
  backend "remote" {
    organization = "learning-journey"
    workspaces {
      name = "demo01"
    }
  }
}

Terraform hỗ trợ nhiều loại backend cho việc lưu file trạng thái như local, remote, s3, azurerm,... Mặc định, trạng thái sẽ được lưu trữ trên local.

Các Loại Backend

1. Local Backend

  • local backend lưu trữ trạng thái trên máy tính của người dùng.
  • Cấu hình:
hcl Copy
terraform {
  backend "local" {
    path = "relative/path/to/terraform.tfstate"
  }
}
  • path: xác định nơi lưu file trạng thái, mặc định là file terraform.tfstate ở root module.

  • Loại backend này phù hợp khi triển khai cơ sở hạ tầng một mình. Tuy nhiên, nếu làm việc nhóm, bạn nên sử dụng một backend chung để tránh xung đột.

2. S3 Backend

  • S3 backend lưu trạng thái trên Amazon S3, đảm bảo tính nhất quán bằng cách sử dụng hai phương pháp lock trạng thái:
    • S3 state locking (use_lockfile) - chỉ có ở phiên bản Terraform 1.10 trở lên.
    • DynamoDB (dynamodb_table), với LockID là partition key dạng string.

Cấu hình S3 Backend

Trước tiên, bạn cần tạo một S3 bucket trên AWS với tên trùng với trường bucket trong block backend:

hcl Copy
terraform {
  backend "s3" {
    bucket = "mybucket"
    key    = "your-state.tfstate"
    region = "us-east-1"
    profile = "Your_Profile"
    dynamodb_table = "states_tb"
  }
}

Bạn cần đảm bảo rằng profile bạn sử dụng đã có quyền truy cập vào S3. Nếu không, hãy thiết lập quyền thích hợp:

json Copy
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::mybucket"
    },
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject", "s3:PutObject"],
      "Resource": ["arn:aws:s3:::mybucket/path/to/my/key"]
    }
  ]
}

Lưu Trữ Trạng Thái Trên S3

  • Tạo S3 bucket tên là terraform-learning-triluong.
  • Chỉnh sửa file main.tf để thêm backend block:
hcl Copy
terraform {
  backend "s3" {
    bucket = "terraform-learning-triluong"
    key = "terraform.state"
    region = "us-east-1"
    profile = "saa"
  }
}
  • Khởi tạo lại workspace với lệnh:
Copy
tf init
  • Sau đó thực hiện các lệnh terraform planterraform apply để triển khai và kiểm tra kết quả trong S3 bucket.

Lock Trạng Thái

Locking bằng S3

Để bật tính năng lock trạng thái trên S3, thêm thông số use_lockfile:

hcl Copy
terraform {
  backend "s3" {
    bucket = "terraform-learning-triluong"
    key = "terraform.state"
    region = "us-east-1"
    profile = "saa"
    use_lockfile = true
  }
}
  • Nếu có nhiều người cùng thực hiện apply, một file lock sẽ được tạo ra trong S3 để tránh xung đột.

Locking bằng DynamoDB

Tạo bảng DynamoDB với tên terraform-states và cấu hình:

hcl Copy
terraform {
  backend "s3" {
    bucket = "terraform-learning-triluong"
    key = "terraform.state"
    region = "us-east-1"
    profile = "saa"
    dynamodb_table = "terraform-states"
  }
}
  • DynamoDB sẽ tạo một record để lock trạng thái trong quá trình thực hiện apply.

Kết Luận

  • Việc sử dụng backend trong Terraform giúp xác định vị trí lưu trữ file trạng thái và hỗ trợ nhiều loại như local, remote, và s3.
  • S3 backend cung cấp tính năng lock trạng thái hữu ích thông qua lock file hoặc DynamoDB, giúp đồng bộ hóa các thao tác của nhiều người dùng.

Hãy cân nhắc sử dụng các backend phù hợp để tối ưu hóa quá trình quản lý cơ sở hạ tầng của bạn.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào