0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Thứ Tự Ưu Tiên Các Cấu Hình Biến Trong Terraform: Hướng Dẫn Chi Tiết

Đăng vào 1 tháng trước

• 4 phút đọc

Thứ Tự Ưu Tiên Các Cấu Hình Biến Trong Terraform

Khi làm việc với Terraform, nhiều khi bạn sẽ gặp phải tình huống khai báo giá trị cho biến (variables) ở nhiều nguồn khác nhau. Vậy, giá trị nào sẽ được chọn khi có sự xung đột? Đây chính là một vấn đề thường gặp và cũng rất thú vị để thảo luận, đặc biệt là trong các cuộc phỏng vấn DevOps. Hãy cùng đi sâu vào tìm hiểu cách Terraform xác định giá trị biến và thứ tự ưu tiên của chúng.

Terraform cho phép xử lý các biến từ nhiều nguồn khác nhau như biến môi trường, tệp terraform.tfvars, tham số dòng lệnh (CLI), đầu vào từ module và ưu tiên các nguồn này theo thứ tự cụ thể. Khi cùng một biến được định nghĩa ở nhiều nơi, Terraform sẽ chọn giá trị từ nguồn có mức ưu tiên cao nhất. Dưới đây là thứ tự ưu tiên từ cao đến thấp:

  1. Tham Số Dòng Lệnh: -var-var-file
    Đây là mức ưu tiên cao nhất. Giá trị biến được truyền trực tiếp qua dòng lệnh sẽ ghi đè tất cả các định nghĩa khác.

    Ví dụ:
    terraform apply -var="instance_type=t3.micro"
    Trong ví dụ này, giá trị instance_type được đặt là t3.micro và ghi đè tất cả các định nghĩa khác.

    Mục đích: Sử dụng khi cần ghi đè nhanh giá trị mặc định hoặc tích hợp vào các script tự động hóa.

  2. Tệp Biến Tự Động Tải: *.auto.tfvars*.auto.tfvars.json
    Terraform sẽ tự động tải các tệp này trong thư mục hiện tại với mức ưu tiên cao sau tham số dòng lệnh.

    Ví dụ:
    Tệp instance.auto.tfvars có nội dung:

    Copy
    instance_type = "t3.medium"

    Terraform sẽ tự động tải và áp dụng giá trị này.

    Mục đích: Lưu trữ giá trị mặc định linh hoạt có thể dễ dàng ghi đè bởi tham số dòng lệnh mà không cần can thiệp thủ công.

  3. Tệp terraform.tfvars.json
    Đây là định dạng có cấu trúc để định nghĩa các biến, rất phù hợp cho những ai ưa chuộng JSON.

    Ví dụ:

    json Copy
    {
      "instance_type": "t3.large"
    }

    Tệp này định nghĩa biến dưới dạng có cấu trúc, không phụ thuộc vào HCL.

    Mục đích: Sử dụng trong môi trường ưa chuộng định dạng JSON.

  4. Biến Môi Trường: TF_VAR_name
    Biến môi trường có tiền tố TF_VAR_ sẽ được Terraform sử dụng như là giá trị biến trong cấu hình.

    Ví dụ:
    export TF_VAR_instance_type="t3.large"
    Giá trị instance_type sẽ được đặt là t3.large, trừ khi có định nghĩa với mức ưu tiên cao hơn.

    Mục đích: Quản lý biến giữa các môi trường (dev, staging, production).

  5. Tệp terraform.tfvars
    Đây là nguồn có mức ưu tiên thấp nhất trong việc định nghĩa biến.

    Ví dụ:

    hcl Copy
    instance_type = "t3.small"

    Nếu không có định nghĩa ở các nguồn khác có ưu tiên cao hơn, giá trị từ tệp terraform.tfvars sẽ được sử dụng.

    Mục đích: Đặt các giá trị mặc định chung cho các cấu hình hạ tầng, hiệu quả cho các giá trị hiếm khi thay đổi.

Ví Dụ Thực Tế: Giá Trị Nào Được Chọn?

Hãy xem một tình huống trong đó biến instance_type được định nghĩa ở nhiều nơi như sau:

  • Trong tệp terraform.tfvars: instance_type = "t3.small"
  • Biến môi trường: TF_VAR_instance_type = "t3.large"
  • Tệp instance.auto.tfvars: instance_type = "t3.medium"
  • Tham số dòng lệnh: terraform apply -var="instance_type=t3.micro"

Với thứ tự ưu tiên đã nêu, giá trị từ tham số dòng lệnh (t3.micro) sẽ được chọn vì nó có mức ưu tiên cao nhất.

Tổng Kết

Việc nắm rõ thứ tự ưu tiên biến trong Terraform giúp bạn:

  • Tránh ghi đè không mong muốn: Hiểu rõ nơi định nghĩa biến sẽ giúp bạn tránh được hành vi không như ý.
  • Đảm bảo cấu hình động: Sử dụng tham số dòng lệnh và biến môi trường giúp bạn cấu hình linh hoạt tùy theo môi trường mà không cần sửa đổi tệp cấu hình.
  • Tối ưu hóa mặc định và ghi đè: Xây dựng các giá trị mặc định hợp lý và dễ dàng ghi đè khi cần thiết.

Chúc bạn thành công!
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