> ## Documentation Index
> Fetch the complete documentation index at: https://docs.skanesgalab.my.id/llms.txt
> Use this file to discover all available pages before exploring further.

# Manajemen Provider & Multi-Provider Setup

> Panduan mendalam cara mencari, mengimpor, dan mengonfigurasi berbagai provider (AWS, Google Cloud, Azure, Cloudflare, Proxmox, Kubernetes, Docker) serta multi-region provider alias.

## Apa itu Terraform Provider?

Secara default, Terraform adalah mesin inti (*core engine*) yang tidak tahu cara berbicara langsung ke server AWS, Google Cloud, atau Proxmox.

**Provider** adalah plugin perangkat lunak yang bertindak sebagai "penerjemah" antara perintah HCL Terraform dengan **REST API** platform target. Provider bertanggung jawab memahami interaksi API, autentikasi, serta mengeksekusi operasi CRUD (*Create, Read, Update, Delete*) pada sumber daya cloud.

```mermaid theme={null}
flowchart TD
    HCL["Kode Terraform (.tf)\nresource 'aws_instance' ..."] --> Engine["Terraform Core Engine"]
    Engine --> P_AWS["AWS Provider Plugin (API Call)"] --> AWS["AWS Cloud"]
    Engine --> P_CF["Cloudflare Provider Plugin (API Call)"] --> CF["Cloudflare DNS"]
    Engine --> P_K8S["Kubernetes Provider Plugin (API Call)"] --> K8S["Kluster K8s"]
    Engine --> P_PVE["Proxmox Provider Plugin (API Call)"] --> PVE["Server Proxmox VE"]
```

***

## Cara Mencari & Mengimpor Provider Baru

Semua provider publik terindeks secara resmi di [Terraform Registry (registry.terraform.io)](https://registry.terraform.io/browse/providers).

### Anatomi Blok `terraform.required_providers`

Untuk mengimpor provider ke proyekmu, deklarasikan sumber (*source*) dan versinya di blok `terraform`:

```hcl theme={null}
terraform {
  required_version = ">= 1.5.0"

  required_providers {
    # 1. Official Provider (Dikelola oleh HashiCorp/Vendor Resmi)
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.30.0"
    }

    # 2. Partner Provider (Contoh: Cloudflare)
    cloudflare = {
      source  = "cloudflare/cloudflare"
      version = "~> 4.20.0"
    }

    # 3. Community Provider (Contoh: Proxmox VE oleh Telmate)
    proxmox = {
      source  = "Telmate/proxmox"
      version = "2.9.14"
    }

    # 4. Docker Provider
    docker = {
      source  = "kreuzwerker/docker"
      version = "~> 3.0.2"
    }
  }
}
```

### Memahami Operator Batasan Versi (*Version Constraints*):

* `version = "5.30.0"`: Mengunci persis hanya ke versi 5.30.0.
* `version = ">= 5.0.0"`: Versi berapa pun asal minimal 5.0.0.
* `version = "~> 5.30.0"` (*Paling Direkomendasikan*): Mengizinkan pembaruan patch minor (misal 5.30.1, 5.30.2), tetapi **mencegah breaking changes** versi besar 6.0.0.

Setelah menambahkan provider di file konfigurasi, jalankan:

```bash theme={null}
terraform init
```

*Terraform akan otomatis mengunduh biner plugin provider yang sesuai dengan sistem operasi komputermu ke folder `.terraform/providers/`.*

***

## Mengonfigurasi Berbagai Jenis Provider Populer

Setiap provider memiliki parameter autentikasi masing-masing:

### 1. Provider AWS (Amazon Web Services)

```hcl theme={null}
provider "aws" {
  region     = "ap-southeast-1"
  # Praktik terbaik: kredensial dibaca otomatis dari ~/.aws/credentials atau env vars
  # (AWS_ACCESS_KEY_ID & AWS_SECRET_ACCESS_KEY)
}
```

### 2. Provider Google Cloud Platform (GCP)

```hcl theme={null}
provider "google" {
  project     = "my-gcp-project-id"
  region      = "asia-southeast2" # Jakarta
  credentials = file("gcp-service-account-key.json")
}
```

### 3. Provider Cloudflare (DNS & Keamanan Web)

```hcl theme={null}
provider "cloudflare" {
  api_token = var.cloudflare_api_token
}
```

### 4. Provider Proxmox VE (Homelab / Private Cloud)

```hcl theme={null}
provider "proxmox" {
  pm_api_url          = "https://192.168.1.100:8006/api2/json"
  pm_api_token_id     = "terraform@pve!token-id"
  pm_api_token_secret = var.pve_token_secret
  pm_tls_insecure     = true
}
```

***

## Tingkat Lanjut: Multi-Region & Multi-Provider Setup Menggunakan `alias`

Sering kali dalam satu proyek arsitektur, kamu harus:

1. Membuat server utama di Region **Singapura (`ap-southeast-1`)**.
2. Membuat server disaster recovery atau sertifikat SSL CloudFront di Region **Virginia AS (`us-east-1`)**.
3. Sekaligus mengarahkan domain di **Cloudflare**.

Kita menggunakan fitur **`alias`** pada blok provider:

```hcl theme={null}
# Provider AWS Default (Singapura)
provider "aws" {
  region = "ap-southeast-1"
}

# Provider AWS Sekunder dengan Alias (US East / Virginia)
provider "aws" {
  alias  = "virginia"
  region = "us-east-1"
}

# 1. Resource dibuat di Singapura (menggunakan provider default)
resource "aws_vpc" "singapore_vpc" {
  cidr_block = "10.0.0.0/16"
  tags       = { Name = "Singapore-Primary-VPC" }
}

# 2. Resource dibuat di Virginia (secara eksplisit memanggil alias virginia)
resource "aws_vpc" "virginia_vpc" {
  provider   = aws.virginia
  cidr_block = "10.200.0.0/16"
  tags       = { Name = "Virginia-Disaster-Recovery-VPC" }
}
```

*Dengan teknik `alias` ini, Terraform dapat mengorkestrasi multi-cloud dan multi-region secara terpadu dalam satu pipeline eksekusi!*


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.