> ## 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.

# Pengenalan Terraform & OpenTofu (IaC)

> Mengenal konsep Infrastructure as Code (IaC), perbedaan Terraform vs Ansible, sejarah OpenTofu fork, dan arsitektur declarative provider.

## Apa itu Infrastructure as Code (IaC)?

Di masa lalu, jika seorang engineer ingin membuat 3 server baru, satu jaringan VPC, dan Load Balancer di penyedia cloud (seperti AWS atau GCP), mereka harus:

1. Membuka browser dan login ke konsol web cloud provider.
2. Mengklik menu VPC, mengisi subnet secara manual.
3. Mengklik tombol *"Launch Instance"* berkali-kali.
4. Mencatat IP address dan setting firewall satu per satu.

Proses manual ini lambat, rentan salah klik (*human-error*), dan sangat sulit untuk diduplikasi ke lingkungan lain.

**Infrastructure as Code (IaC)** adalah pendekatan untuk mendefinisikan, menyediakan (*provisioning*), dan mengelola infrastruktur pusat data menggunakan **berkas kode konfigurasi deklaratif**.

***

## Apa itu Terraform & Mengapa Muncul OpenTofu?

### 1. Terraform

Dibuat oleh HashiCorp pada tahun 2014, **Terraform** adalah alat IaC terpopuler di dunia. Terraform menggunakan bahasa khusus bernama **HashiCorp Configuration Language (HCL)**.

### 2. Apa itu OpenTofu?

Pada Agustus 2023, HashiCorp mengubah lisensi software Terraform dari open-source murni (MPL 2.0) menjadi lisensi bisnis BSL (*Business Source License*).

Menanggapi perubahan ini, komunitas open-source global bersama Linux Foundation membuat fork independen bernama **OpenTofu**. OpenTofu adalah alternatif open-source 100% yang sepenuhnya kompatibel dengan sintaks, berkas `.tf`, dan ekosistem provider Terraform yang sudah ada.

***

## Perbedaan Terraform (IaC) vs Ansible (Config Management)

Sering kali pemula bingung kapan harus menggunakan Terraform dan kapan harus menggunakan Ansible. Keduanya **saling melengkapi**:

| Parameter | Terraform / OpenTofu | Ansible |
| :- | :- | :- |
| **Fokus Utama** | **Infrastruktur (*Provisioning*)**: Membuat VM, VPC, Storage, Firewall, Subnet, DNS. | **Konfigurasi (*Configuration*)**: Menginstal aplikasi, update OS, konfigurasi Nginx/Database. |
| **Status State** | *Stateful* (Mencatat status infrastruktur di berkas `terraform.tfstate`). | *Stateless* (Mengecek kondisi server target secara langsung saat itu juga). |
| **Analogi Bangunan** | Membangun fondasi rumah, dinding, dan instalasi pipa listrik. | Mengecat dinding, memasang furnitur meja, dan mengisi lemari es. |

> **Kombinasi Terbaik di Industri:**\
> Gunakan **Terraform** untuk membuat 3 VM dan jaringan VPC di AWS $\to$ lalu gunakan **Ansible** untuk menginstal Docker dan aplikasi di dalam ke-3 VM tersebut!

***

## Konsep Inti Terraform

1. **Provider:** Plugin yang menghubungkan Terraform dengan API platform target (contoh: AWS Provider, Google Cloud Provider, Proxmox Provider, Kubernetes Provider).
2. **State File (`terraform.tfstate`):** File basis data internal tempat Terraform merekam ID nyata dan status sumber daya cloud yang sudah pernah ia buat.
3. **Siklus Eksekusi Terraform (The Core Workflow):**
   * **`terraform init`:** Mengunduh plugin provider yang dibutuhkan.
   * **`terraform plan`:** Menampilkan simulasi preview perubahan (apa saja yang akan dibuat, diubah, atau dihapus).
   * **`terraform apply`:** Mengeksekusi pembuatan infrastruktur nyata ke cloud provider.
   * **`terraform destroy`:** Menghapus seluruh infrastruktur yang telah dibuat untuk menghentikan tagihan cloud.


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