Cấu hình quy định phiên bản Terraform và Terraform Provider

Cấu hình quy định phiên bản Terraform và Terraform ProviderCuongquach.com | Khi bạn sử dụng Terraform, sẽ phát sinh nhu cầu cần quy định các phiên bản của các Provider trong một module hoặc một thư mục cấu hình resource Terraform. Cũng như quy định phiên bản cho chương trình binary Terraform nữa. Đây là nhu cầu cơ bản và cần thiết, nên trong bài viết này chúng ta cùng điểm qua nội dung đơn giản này nhé.

quy-dinh-phien-ban-terraform-va-provider

Tại sao lại phải quy định phiên bản Terraform/Provider

Vì các phiên bản khác nhau sẽ có những sự thay đổi về :

  • Cú pháp cấu hình
  • Cách thức xử lý API
  • Cách thức xử lý resource
  • ..

Vì vậy để tránh việc làm hỏng các cấu hình quản lý resource trong Terraform, ta thường quy định các phiên bản phù hợp vào thời điểm viết code để quản lý resource.

Toán tử so sánh trong Terraform version

Một số toán tử điều kiện Terraform hỗ trợ khi chỉ định phiên bản:

  • = : điều kiện chính xác bằng phiên bản cụ thể.
  • = : điều kiện không cần bằng phiên bản cụ thể.
  • >, >=, <, <=: so sánh lớn hơn, lớn hơn hoặc bằng, nhỏ hơn, nhỏ hơn hoặc bằng .
  • ~>: áp dụng cho điều kiện tới con số các phiên bản minor hoặc patch. Ví dụ: ~> 0.9 (tương đương >= 0.9 , <1.0) . Ví dụ 2: ~> 0.8.4 (tương đương >= 0.8.4, < 0.9)

Quy định phiên bản Terraform binary

Khi bạn chạy Terraform, bạn có thể quy định cụ thể phiên bản Terraform bao nhiêu ? Để tránh người dùng sử dụng các phiên bản cũ, không còn tương thích với các cấu hình trong Terraform của bạn. Sử dụng block cấu hình required_version.

+ Cú pháp

Sử dụng block type : terraform { }

terraform {
  required_version = ">= 0.13.0, < 0.14.0"
}

Bạn có thể kiểm tra phiên bản terraform như sau :

# terraform --version
Terraform v0.12.29

Bạn sẽ gặp thông báo lỗi sau, nếu sử dụng terraform phiên bản không nằm trong giới hạn quy định.

Error: Unsupported Terraform Core version

This configuration does not support Terraform version 0.12.29. To proceed,
either choose another supported Terraform version or update the root module's
version constraint. Version constraints are normally set for good reason, so
updating the constraint may lead to other errors or unexpected behavior.

Quy định phiên bản Terraform Provider

Provider được coi là các plugin, chúng được sử dụng như chương trình thực hiện các tính năng built-in Terraform hoặc dùng để kết nối API với các Cloud Provider. Các Provider đều được phát hành với các phiên bản hiệu số cụ thể. Sử dụng block cấu hình required_providers.

+ Cú pháp mới

Sử dụng block type : terraform { }
Cú pháp mới từ Terraform phiên bản 0.12.26 trở lên (0.13.x) (nên sử dụng cú pháp này):

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = ">= 1.0"
    }
  }
}

+ Cú pháp cũ

Terraform từ 0.12.26 trở xuống:

terraform {
  required_providers {
    aws      = ">= 2.0, < 4.0"
    template = "~> 2.0"
    local    = "~> 1.2"
    null     = "~> 2.0"
  }
}

+ Cú pháp block provider {}

Bạn cũng có thể chỉ định trực tiếp phiên bản Provider trong từng block cấu hình provider {}.

provider "aws" {
	version = "2.33.0"
}

provider "template" {
	version = "2.1.1"
}

provider "local" {
	version = "1.4.0"
}

provider "null" {
	version = "2.1.1"
}

Ví dụ quy định phiên bản Terraform và Terraform Provider

Ví dụ quy định phiên bản cả 2 đối tượng Terraform binaryTerraform provider.

# touch version.tf
terraform {
  required_version = ">= 0.12.0, < 0.14.0"

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = ">= 3.3.0"
    }

    template = {
      source  = "hashicorp/template"
      version = ">= 2.1.1"
    }

    local = {
      source  = "hashicorp/local"
      version = ">= 1.4.0"
    }

    null = {
      source  = "hashicorp/null"
      version = ">= 2.1.1"
    }
   }
}

Tham khảo link source của các provider như sau tại Terraform registry:

Chú thích:

  • version: số hiệu phiên bản Provider, nếu bạn sử dụng Provider được cung cấp bởi Terraform trên Terraform Registry.
  • source: địa chỉ nguồn mà Terraform sẽ đi tải Provider về.

Cú pháp:

[<HOSTNAME>/]<NAMESPACE>/<TYPE>

Trong đó
+ <HOSTNAME>:  mặc định là registry.terraform.io tương ứng public Terraform Registry.
+ <NAMESPACE>: là tên org đang sở hữu các provider. Mặc định public là hashicorp trên Public Terraform Registry.
+ <TYPE>: là tên provider.

Khi bạn chạy terraform init hay terraform get , terraform sẽ tiến hành download các provider với phiên bản bạn quy định. Cũng như kiểm tra phiên bản Terraform được cho phép chạy.

Cấu trúc thư mục cấu hình Terraform với version

Khi bạn coi các github repo về các module Terraform thường bạn sẽ thấy một file tên version.tf với cú pháp tên như vậy để mọi người dễ hiểu là nội dung file đó sẽ giúp quy định phiên bản cho Terraform và Terraform provider.

.
├── main.tf
├── output.tf
├── variables.tf
└── version.tf

Nguồn: https://cuongquach.com/

Previous articleCấu hình Terraform sử dụng Module trên Terraform Registry
Next articleTìm hiểu tính năng Terraform `taint`
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !