Di episode ini kalian menjalankan core workflow OpenTofu: init, plan, apply, dan destroy. Kita juga membahas OpenTofu Registry tempat provider dan modul diunduh, serta prosedur migrasi drop-in replacement dari Terraform tanpa mengubah satu baris pun HCL.

Di episode 1 kita membahas sejarah: lahirnya OpenTofu dari perubahan lisensi Terraform, dukungan Linux Foundation, dan komitmen backward compatibility 1:1. Komitmen itu bukan sekadar janji — di episode 2 ini kalian akan membuktikannya langsung dengan menjalankan workflow inti OpenTofu dari awal sampai akhir.
Ada tiga hal yang dibahas: core workflow (init → plan → apply → destroy), OpenTofu Registry tempat provider dan modul diunduh, serta prosedur migrasi dari Terraform yang mulus. Di akhir episode, kalian bisa mengambil project Terraform yang sudah ada dan menjalankannya dengan tofu tanpa mengubah apa pun.
Workflow OpenTofu mengikuti siklus empat langkah yang menjadi bahasa universal tim IaC di mana pun.
| Command | Fungsi | Frekuensi |
|---|---|---|
tofu init | Mengunduh provider, modul, dan menyiapkan backend | Sekali per project, atau saat ada perubahan |
tofu plan | Menghitung pratinjau perubahan tanpa menyentuh cloud | Setiap akan melakukan perubahan |
tofu apply | Mengeksekusi perubahan yang disetujui ke cloud | Setelah plan disetujui |
tofu destroy | Menghapus seluruh resource yang dikelola | Saat environment tidak dibutuhkan lagi |
tofu init adalah gerbang pertama. Ia membaca blok required_providers, mengunduh provider dari registry, mencatat versi ke .terraform.lock.hcl, dan menyiapkan backend tempat state disimpan.
tofu init
Initializing the backend...
Initializing provider plugins...
- Finding hashicorp/aws versions matching "~> 5.0"...
- Installing hashicorp/aws v5.94.0...
- Installed hashicorp/aws v5.94.0 (signed by HashiCorp)
OpenTofu has been successfully initialized!tofu plan menjalankan dry run. Ia membandingkan state aktual dengan kode HCL, lalu menghasilkan rencana aksi. Inilah safety net utama kalian — semua kesalahan di sini tidak merusak cloud.
tofu plan
Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
+ create
# aws_instance.web will be created
+ resource "aws_instance" "web" {
+ ami = "ami-0c55b159cbfafe1f0"
+ instance_type = "t3.micro"
}
Plan: 1 to add, 0 to change, 0 to destroy.Tip
Biasakan memanggil tofu plan sebelum tofu apply setiap saat — terutama di tim. Plan bisa disimpan dengan tofu plan -out=plan.tfplan agar apply hanya mengeksekusi rencana yang sudah disetujui, bukan menghitung ulang dari kode terbaru.
tofu apply adalah eksekutor. Ia membuat, mengubah, atau menghapus resource di cloud sesuai plan. OpenTofu menampilkan ringkasan dan meminta konfirmasi sebelum mulai (bisa dilewati dengan flag -auto-approve).
aws_instance.web: Creating...
aws_instance.web: Still creating... [10s elapsed]
aws_instance.web: Creation complete after 17s
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.tofu destroy menjalankan plan kebalikannya: menghapus semua resource yang tercatat di state. Ini krusial untuk environment percobaan dan pengendalian biaya.
tofu destroyKetika tofu init mencari provider atau modul, ia berbelanja di registry.opentofu.org. Registry ini adalah katalog publik berisi provider resmi (seperti hashicorp/aws) dan modul komunitas yang bisa dipakai ulang. Berbeda dengan "semua harus dibuat sendiri", registry inilah yang membuat IaC begitu produktif.
Provider tetap bersumber dari hashicorp/aws — alamat yang kompatibel dengan Terraform — sehingga sebagian besar ekosistem langsung berfungsi. Kalian akan melihat deklarasi provider ini secara detail di episode 3. Modul juga bisa dipanggil dari registry, Git, atau path lokal — untuk episode ini cukup tahu bahwa lokasi unduh dikendalikan oleh blok required_providers dan atribut source pada modul.
Ini bagian yang paling dicari banyak engineer: cara pindah dari Terraform ke OpenTofu tanpa mengganti satu baris pun HCL. Karena OpenTofu dibangun dari fork Terraform 1.5.x dan mempertahankan kompatibilitas 1:1, prosedurnya sangat sederhana.
Langkah 1: ganti binary. Pastikan tofu terpasang dan ganti pemanggilan terraform.
Langkah 2: jalankan workflow biasa. tofu init, tofu plan, tofu apply membaca HCL dan state yang sama persis.
Langkah 3: untuk backend remote, tofu init -migrate-state menyalin state ke backend yang sama tanpa kehilangan data.
tofu init -migrate-stateFakta yang sering mengejutkan: OpenTofu bisa membaca .terraform.lock.hcl yang dihasilkan Terraform, jadi kalian tidak perlu menghapus atau men-generate ulang file lock.
Banyak skrip yang masih memanggil terraform. Untuk transisi mulus, gunakan alias:
alias terraform=tofu
terraform --version # sebenarnya mengeksekusi OpenTofuTambahkan baris alias ini ke ~/.bashrc atau ~/.zshrc agar permanen. Untuk repo dengan banyak skrip CI, cara ini membuat transisi "diam-diam" — tidak ada yang berubah dari sudut pandang script.
Warning
Beberapa hal perlu perhatian saat migrasi: skrip yang memanggil literal terraform di CI (ganti dengan tofu atau alias), dan backend Terraform Cloud yang bersifat proprietary — untuk itu pertimbangkan backend lain seperti S3 yang akan dibahas di episode 5.
Ringkasan episode 2:
tofu init → tofu plan → tofu apply → tofu destroy.hashicorp/aws yang tetap kompatibel.terraform=tofu membuat transisi transparan untuk skrip lama.Sekarang kalian sudah bisa menjalankan OpenTofu end-to-end. Di episode 3 berikutnya kita masuk lebih dalam ke bahasa konfigurasi: deklarasi provider, resource, dan data sources — fondasi HCL yang akan kalian pakai di hampir setiap file .tf. Sampai jumpa!