Provider #

Provider adalah komponen yang membuat Terraform bisa berbicara dengan dunia luar. Tanpa provider, Terraform hanya tahu cara membaca file HCL — ia tidak tahu cara membuat EC2 instance, membuat DNS record, atau mengkonfigurasi Kubernetes cluster. Provider-lah yang menerjemahkan instruksi di file .tf-mu menjadi panggilan API ke layanan yang sebenarnya.

Apa itu Provider #

Provider adalah plugin yang memperluas kemampuan Terraform agar bisa berinteraksi dengan layanan eksternal tertentu. Setiap provider menyediakan sekumpulan resource type dan data source yang bisa kamu gunakan dalam konfigurasi.

CARA PROVIDER BEKERJA:

File Konfigurasi (.tf)
        │
        ▼
    Terraform Core
    (parsing, planning, state)
        │
        ▼
    Provider Plugin
    (AWS / GCP / Azure / Cloudflare / dll.)
        │
        ▼
    API Layanan Eksternal
    (AWS API, GCP API, Cloudflare API, dll.)
        │
        ▼
    Resource dibuat/diubah/dihapus

Provider diunduh secara otomatis saat kamu menjalankan terraform init — kamu tidak perlu menginstallnya secara manual.


Mengkonfigurasi Provider #

Setiap provider perlu dideklarasikan dan dikonfigurasi sebelum bisa digunakan.

# Langkah 1: Deklarasikan provider yang dibutuhkan
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"  # Pin ke major version 5
    }
    cloudflare = {
      source  = "cloudflare/cloudflare"
      version = "~> 4.0"
    }
  }
}

# Langkah 2: Konfigurasi provider
provider "aws" {
  region = "ap-southeast-1"
  # Credential diambil dari environment variable atau
  # ~/.aws/credentials — tidak di-hardcode di sini
}

provider "cloudflare" {
  api_token = var.cloudflare_api_token
  # Gunakan variable, bukan hardcode
}
Jangan pernah hardcode credential (access key, secret, token) langsung di dalam blok provider. Gunakan environment variable, variable Terraform, atau secrets manager. File konfigurasi Terraform masuk ke version control — credential yang hardcode akan bocor.

Versi Provider dan Kenapa Penting #

Pinning versi provider adalah praktik wajib, bukan opsional. Provider bisa release breaking change yang merusak konfigurasi yang sudah berjalan.

# ANTI-PATTERN: Tidak pin versi
terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
      # Tanpa version constraint — Terraform akan download versi terbaru
      # Provider v5 bisa breaking change dari v4
    }
  }
}

# BENAR: Pin ke range versi yang aman
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.31"
      # ~> 5.31 artinya: >= 5.31.0 dan < 6.0.0
      # Terima patch update, tolak major/minor yang breaking
    }
  }
}

Setelah terraform init, Terraform membuat file .terraform.lock.hcl yang mencatat versi provider yang diinstall. File ini harus di-commit ke version control agar semua anggota tim menggunakan versi yang identik.

# .terraform.lock.hcl — jangan abaikan file ini
provider "registry.terraform.io/hashicorp/aws" {
  version     = "5.31.0"
  constraints = "~> 5.31"
  hashes = [
    "h1:abcdef1234567890...",
    # Hash untuk verifikasi integritas
  ]
}

Multi-Provider #

Terraform bisa menggunakan lebih dari satu provider sekaligus — bahkan beberapa instance dari provider yang sama (misalnya AWS di region berbeda).

# Multi-region AWS menggunakan alias
provider "aws" {
  region = "ap-southeast-1"  # Singapore (default)
}

provider "aws" {
  alias  = "us_east"
  region = "us-east-1"  # Virginia
}

# Penggunaan provider dengan alias
resource "aws_s3_bucket" "asia" {
  bucket = "app-assets-asia"
  # Menggunakan provider default (ap-southeast-1)
}

resource "aws_s3_bucket" "us" {
  provider = aws.us_east  # Eksplisit menggunakan alias
  bucket   = "app-assets-us"
}

Mencari dan Memilih Provider #

Semua provider tersedia di Terraform Registry di registry.terraform.io. Format source address selalu mengikuti pola namespace/provider-name.

# Format source address provider
terraform {
  required_providers {
    # Provider resmi HashiCorp
    aws        = { source = "hashicorp/aws" }
    azurerm    = { source = "hashicorp/azurerm" }
    google     = { source = "hashicorp/google" }
    kubernetes = { source = "hashicorp/kubernetes" }

    # Provider dari vendor
    cloudflare = { source = "cloudflare/cloudflare" }
    datadog    = { source = "datadog/datadog" }
    github     = { source = "integrations/github" }
    
    # Provider komunitas
    postgresql = { source = "cyrilgdn/postgresql" }
  }
}

Ringkasan #

  • Provider adalah plugin yang menghubungkan Terraform dengan API layanan eksternal — tanpa provider, Terraform tidak bisa membuat resource apapun.
  • Provider diinstall otomatis saat terraform init — kamu hanya perlu mendeklarasikannya di blok required_providers.
  • Selalu pin versi provider dengan version = "~> X.Y" untuk mencegah breaking change yang tidak terduga.
  • Commit .terraform.lock.hcl ke version control agar semua anggota tim menggunakan versi provider yang identik.
  • Jangan hardcode credential di blok provider — gunakan environment variable atau variable Terraform.
  • Multi-provider dengan alias memungkinkan kamu mengelola resource di region atau account yang berbeda dari satu konfigurasi.

← Sebelumnya: Declarative   Berikutnya: Resource →

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact