Terraform Providers là gì? – Bài 2

Trong bài viết này, chúng ta sẽ cùng tìm hiểu terraform providers là gì, vì sao khi làm việc với Terraform bắt buộc phải dùng Provider, và cách Terraform sử dụng Provider để tạo tài nguyên trên các nền tảng như AWS, Azure hay Google Cloud.

Xem thêm:

Terraform và Infrastructure as Code (IAC) – Bài 1

Input & Output Variables – Bài 3

1. Terraform Provider là gì?

Terraform Provider là thành phần đóng vai trò kết nối giữa Terraform và nền tảng như:

  • AWS (Amazon Web Services)
  • Azure
  • Google Cloud (GCP)
  • Oracle Cloud
  • Alibaba Cloud
  • VMware, Kubernetes, GitHub, v.v.

Terraform chỉ là một công cụ quản lý hạ tầng, không tự biết cách tạo EC2, VM hay Kubernetes cluster.

Terraform không trực tiếp gọi API của AWS, Azure hay GCP.

Thay vào đó:

  • Terraform đọc file cấu hình .tf
  • Sau đó ủy quyền toàn bộ việc giao tiếp với cloud cho Provider

Provider chính là thành phần:

  • Hiểu API của cloud
  • Biết cách tạo, sửa, xóa tài nguyên
  • Thực hiện các thao tác đó thay mặt Terraform

Ví dụ thực tế:

  • Muốn tạo EC2 trên AWS→ Terraform gọi AWS Provider
  • Muốn tạo Virtual Machine trên Azure→ Terraform gọi Azure Provider

Nếu không có provider tương ứng, Terraform không biết phải nói chuyện với cloud đó bằng cách nào.

2. Vì sao Terraform bắt buộc phải có Provider?

Terraform hoạt động theo mô hình plugin-based (dựa trên plugin).

Điều này có nghĩa là:

  • Terraform Core (phần lõi) không chứa sẵn logic làm việc với cloud
  • Mỗi nền tảng (AWS, Azure, GCP, Kubernetes…) sẽ có một provider riêng

Vai trò cụ thể của Provider

Provider là một plugin được Terraform tải về từ Terraform Registry và dùng để:

  • Gọi API của cloud (REST API, SDK…)
  • Xác thực (authentication)
  • Tạo tài nguyên (Create)
  • Cập nhật tài nguyên (Update)
  • Xóa tài nguyên (Delete)
  • Đọc trạng thái tài nguyên (Read)

Không có Provider thì chuyện gì xảy ra?

Nếu không có provider:

  • Terraform không thể kết nối tới cloud
  • Không thể xác thực tài khoản
  • Không thể tạo bất kỳ tài nguyên nào
  • File .tf chỉ là… văn bản, không có giá trị thực thi

3. Best Practice: Luôn chỉ định version provider

KHÔNG nên viết như sau

provider "aws" {
  region = "us-east-1"
}

Cách viết này khiến Terraform:

  • Luôn tải phiên bản mới nhất của AWS provider
  • Rất dễ phát sinh lỗi nếu provider có thay đổi lớn

NÊN viết như sau

provider "aws" {
  region  = "us-east-1"
  version = "~> 3.53.0"
}

Vì sao bắt buộc phải chỉ định version provider?

1. Tránh lỗi do breaking change

Provider được phát hành rất thường xuyên.

Một version mới có thể:

  • Đổi tên resource
  • Thay đổi thuộc tính
  • Xóa tính năng cũ

Nếu bạn không khóa version, code đang chạy tốt hôm nay có thể lỗi ngay ngày mai.

2. Giữ code ổn định theo thời gian

  • Code Terraform có thể tồn tại nhiều năm
  • Việc cố định version giúp:
    • Deploy ổn định
    • Dễ rollback
    • Dễ debug lỗi

4. Có thể dùng nhiều provider trong một project không?

CÓ – Hoàn toàn được

Terraform cho phép bạn sử dụng nhiều provider cùng lúc trong một project.

Ví dụ:

  • AWS → chạy EC2, ALB
  • Azure → chạy VM
  • GitHub → quản lý repository và CI/CD

Ví dụ file Terraform dùng nhiều provider

Tạo file main.tf:

provider "aws" {
  region  = "us-east-1"
  version = "~> 3.53.0"
}

provider "azurerm" {
  features {}
  version = "~> 2.72.0"
}

Lưu ý:

  • Tất cả file Terraform đều có phần mở rộng .tf
  • Terraform sẽ tự động tải tất cả provider cần thiết khi chạy terraform init

5. Sự khác nhau giữa Terraform Provider và Terraform Module

Provider Module
Giao tiếp với hệ thống bên ngoài (AWS, Azure…) Gom nhiều resource thành một khối
Là plugin Là code Terraform
Gọi API cloud Tái sử dụng cấu hình
Bắt buộc phải có Không bắt buộc

Hiểu đơn giản:

  • Provider = công cụ kết nối cloud
  • Module = cách tổ chức code cho gọn và tái sử dụng

Bài viết thuộc series Terraform Associate Certification, dành cho người mới bắt đầu và người đang ôn thi chứng chỉ. Cảm ơn bạn đã theo dõi tại ttnguyen.net.

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em