HomeAuthorsContact

Mengimpor DNS Record Cloudflare ke Terraform

By Rona Ariyolo Sitorus
Published in Literasi
August 31, 2023
5 min read
Mengimpor DNS Record Cloudflare ke Terraform

Mengelola DNS langsung dari dashboard Cloudflare memang praktis saat jumlah record masih sedikit. Masalah mulai terasa ketika record sudah banyak, dikelola oleh beberapa orang, atau perlu dijaga konsistensinya antar lingkungan. Pada titik itu, pendekatan manual biasanya mulai merepotkan: perubahan sulit dilacak, review tidak rapi, dan risiko salah ubah record menjadi lebih besar.

Di sinilah Terraform terasa berguna. Dengan Terraform, konfigurasi infrastruktur bisa diperlakukan sebagai kode. DNS record tidak lagi hanya tersimpan di panel web, tetapi juga terdokumentasi dalam file yang bisa ditinjau, diubah, dan dijalankan ulang dengan cara yang lebih terkendali.

Tantangannya adalah satu hal: bagaimana kalau semua DNS record di Cloudflare sudah telanjur ada? Menulis ulang semuanya satu per satu ke Terraform jelas bukan pekerjaan yang efisien. Solusi yang jauh lebih masuk akal adalah mengimpor konfigurasi yang sudah ada ke dalam Terraform.

Artikel ini membahas alur yang lebih rapi untuk melakukan itu: mulai dari menyiapkan token, membuat konfigurasi provider, menghasilkan file resource dengan cf-terraforming, lalu mengimpor resource tersebut ke Terraform state agar terraform plan tidak menganggap semuanya sebagai resource baru.

Kenapa DNS Cloudflare perlu dikelola dengan Terraform?

Sebelum masuk ke langkah teknis, ada baiknya melihat alasan kenapa pendekatan ini layak dilakukan.

Saat DNS dikelola manual lewat dashboard:

  • perubahan mudah dilakukan, tetapi sulit ditinjau,
  • histori perubahan tidak otomatis terdokumentasi dengan baik,
  • dan standar penamaan atau struktur record sering tidak konsisten.

Begitu DNS masuk ke Terraform, ada beberapa keuntungan yang langsung terasa:

  • konfigurasi bisa disimpan di repository,
  • perubahan bisa direview lewat pull request,
  • kondisi infrastruktur menjadi lebih mudah direplikasi,
  • dan audit perubahan jauh lebih jelas.

Untuk domain yang sudah aktif bertahun-tahun, ini sangat membantu karena DNS biasanya berkembang organik dan jarang lagi benar-benar “bersih”.

Gambaran masalah yang sebenarnya ingin diselesaikan

Banyak orang berhenti setelah berhasil menghasilkan file Terraform dari Cloudflare. Padahal itu baru setengah jalan.

Misalnya kamu sudah menjalankan tool untuk mengekspor semua record Cloudflare menjadi resource Terraform. File .tf memang sudah ada. Tetapi ketika menjalankan:

terraform plan

Terraform masih akan menampilkan banyak aksi create.

Ini bukan karena file hasil ekspor salah. Penyebabnya lebih sederhana: Terraform belum tahu bahwa resource yang tertulis di file itu sebenarnya sudah ada di Cloudflare. Dengan kata lain, definisinya ada, tetapi state Terraform belum mengenalnya.

Jadi, proses lengkapnya terdiri dari dua tahap:

  1. menghasilkan file resource Terraform dari data Cloudflare,
  2. mengimpor resource yang sama ke Terraform state.

Kalau hanya melakukan tahap pertama, plan masih akan terlihat seolah-olah semua record akan dibuat ulang.

Tool yang dipakai: cf-terraforming

Cloudflare menyediakan tool bernama cf-terraforming untuk membantu proses ini. Tool ini berguna untuk dua hal utama:

  • generate resource Terraform dari konfigurasi yang ada di Cloudflare,
  • import resource tersebut ke Terraform state.

Inilah tool yang paling praktis untuk migrasi DNS Cloudflare dari pengelolaan manual ke Infrastructure as Code.

1. Install cf-terraforming

Untuk pengguna macOS, instalasi paling praktis biasanya lewat Homebrew:

brew tap cloudflare/cloudflare
brew install --cask cloudflare/cloudflare/cf-terraforming

Kalau tidak memakai macOS, tool ini juga tersedia dalam bentuk binary di repository GitHub Cloudflare. Pilih saja metode instalasi yang paling sesuai dengan lingkungan kerja kamu.

Setelah instalasi selesai, pastikan tool bisa dipanggil dari terminal:

cf-terraforming --help

Kalau perintah ini berjalan, berarti tahap awal sudah beres.

2. Buat API Token Cloudflare

Karena kita akan membaca konfigurasi DNS dari Cloudflare, kita perlu token API yang punya izin yang sesuai.

Langkah umumnya:

  1. Buka dashboard Cloudflare.
  2. Masuk ke halaman profil akun.
  3. Pilih menu API Tokens.
  4. Buat token baru.
  5. Pilih template izin yang relevan untuk DNS, atau buat permission custom.

Untuk kebutuhan ekspor record DNS, pendekatan yang paling aman adalah memberi izin sesempit mungkin, cukup untuk zona yang memang ingin dikelola.

Kalau ingin cepat, kamu bisa mulai dari template seperti Edit zone DNS, lalu sesuaikan resource zone yang boleh diakses. Untuk tahap migrasi awal, beberapa orang memilih All Zones agar lebih praktis, tetapi untuk penggunaan jangka panjang sebaiknya izin dibatasi sesuai kebutuhan.

Satu hal penting: token ini bersifat sensitif. Jangan simpan sembarangan di file yang ikut ter-commit ke repository.

3. Siapkan konfigurasi Terraform untuk Cloudflare

Sebelum generate atau import record, buat dulu konfigurasi dasar provider Cloudflare di Terraform.

Contoh main.tf:

terraform {
required_providers {
cloudflare = {
source = "cloudflare/cloudflare"
version = "~> 4.0"
}
}
}
provider "cloudflare" {
api_token = var.cloudflare_api_token
}

Konfigurasi ini cukup untuk memulai. Nanti token API-nya bisa diberikan melalui variable, environment variable, atau mekanisme secret lain yang kamu gunakan di workflow Terraform.

Kalau ingin setup lebih rapi, biasanya token tidak ditulis langsung di file .tf, tetapi disuplai dari luar supaya tidak bercampur dengan source code.

4. Siapkan environment variable yang dibutuhkan

Saat menggunakan cf-terraforming, ada beberapa nilai yang perlu disiapkan:

  • email akun Cloudflare,
  • API token,
  • dan zone ID domain yang akan diimpor.

Contoh:

export CLOUDFLARE_EMAIL="email-akun-cloudflare"
export CLOUDFLARE_API_TOKEN="token-cloudflare"
export CLOUDFLARE_ZONE_ID="zone-id-domain"

ZONE_ID bisa kamu ambil dari dashboard Cloudflare pada halaman domain yang sedang dikelola.

Kalau kamu mengelola banyak domain, sebaiknya lakukan proses ini per-zone. Hasilnya lebih mudah dirapikan dan lebih jelas saat dibaca ulang nanti.

5. Generate resource Terraform dari DNS Cloudflare

Setelah environment variable siap, gunakan cf-terraforming untuk menghasilkan resource Terraform:

cf-terraforming generate \
--email "$CLOUDFLARE_EMAIL" \
--token "$CLOUDFLARE_API_TOKEN" \
-z "$CLOUDFLARE_ZONE_ID" \
--resource-type cloudflare_record > ariyolo-id.tf

Perintah ini akan membaca semua DNS record pada zone yang dipilih, lalu menulis hasilnya ke file Terraform.

Nama file output sebaiknya dibuat mengikuti nama domain, misalnya:

  • ariyolo-id.tf
  • example-com.tf
  • internal-example-net.tf

Kebiasaan kecil seperti ini akan sangat membantu kalau nanti jumlah domain yang dikelola bertambah.

6. Pahami hasil generate dengan benar

Setelah file .tf terbentuk, kamu akan melihat banyak block resource seperti ini:

resource "cloudflare_record" "terraform_managed_resource_xxx" {
name = "rona"
type = "A"
value = "16.3.19.94"
ttl = 1
proxied = false
zone_id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}

Di tahap ini, banyak orang mengira migrasi sudah selesai. Padahal belum.

File tersebut baru berisi definisi resource, belum berarti Terraform sudah mengenali resource itu sebagai bagian dari state yang sedang dikelola. Kalau langsung menjalankan terraform plan, Terraform akan cenderung menganggap resource-resource ini sebagai objek baru yang perlu dibuat.

Itulah alasan kenapa proses import ke state tetap wajib dilakukan.

7. Kenapa terraform plan masih menampilkan + create?

Ini bagian yang paling penting untuk dipahami.

Terraform bekerja dengan dua hal:

  • file konfigurasi (.tf),
  • dan state.

Kalau file konfigurasi ada tetapi state belum tahu bahwa resource tersebut sudah eksis di provider, maka Terraform menganggap resource itu belum ada. Akibatnya, plan akan menunjukkan aksi create.

Jadi, tujuan import bukan membuat record baru di Cloudflare. Tujuan import adalah memberi tahu Terraform bahwa record yang sudah ada di Cloudflare harus dipetakan ke resource yang ada di file konfigurasi.

Begitu mapping ini selesai, barulah terraform plan mulai menunjukkan hasil yang masuk akal.

8. Generate skrip import untuk state Terraform

Untungnya, cf-terraforming tidak hanya bisa generate file resource, tetapi juga bisa membuat skrip import.

Contohnya:

cf-terraforming import \
--resource-type "cloudflare_record" \
--email "$CLOUDFLARE_EMAIL" \
--token "$CLOUDFLARE_API_TOKEN" \
-z "$CLOUDFLARE_ZONE_ID" > ariyolo-id.sh

Perintah ini akan menghasilkan skrip shell yang berisi banyak perintah terraform import.

Kemudian beri izin eksekusi:

chmod +x ariyolo-id.sh

Lalu jalankan:

./ariyolo-id.sh

Saat skrip ini berjalan, Terraform akan mulai memasukkan resource Cloudflare yang sudah ada ke dalam state.

9. Verifikasi hasil import

Setelah proses import selesai, jalankan:

terraform plan

Kalau semua berjalan sesuai harapan, hasil plan tidak lagi menunjukkan bahwa Terraform akan membuat ulang semua DNS record tadi.

Idealnya, hasilnya mendekati salah satu dari kondisi berikut:

  • tidak ada perubahan,
  • atau hanya ada perbedaan kecil yang memang perlu dirapikan.

Kalau masih banyak create, biasanya ada beberapa kemungkinan:

  • file .tf yang digenerate tidak sama dengan resource yang diimport,
  • zone ID yang dipakai tidak sesuai,
  • state berada di workspace atau backend yang berbeda,
  • atau ada perubahan manual di Cloudflare setelah file dihasilkan.

Praktik yang sebaiknya dilakukan setelah impor berhasil

Setelah semua record berhasil masuk ke Terraform, pekerjaan sebenarnya justru baru dimulai. Supaya migrasi ini tidak berakhir sia-sia, ada beberapa langkah lanjutan yang sebaiknya dilakukan:

  • rapikan nama resource yang masih generik,
  • kelompokkan record kalau jumlahnya sangat banyak,
  • pindahkan token dan secret ke mekanisme penyimpanan yang aman,
  • dan tetapkan aturan bahwa perubahan DNS berikutnya dilakukan lewat Terraform, bukan langsung dari dashboard.

Kalau perubahan tetap sering dilakukan manual di Cloudflare, maka drift antara dashboard dan Terraform akan cepat muncul lagi.

Kesalahan yang sering terjadi

Ada beberapa kesalahan yang cukup umum saat pertama kali mencoba workflow ini.

Menganggap generate saja sudah cukup

Ini kesalahan paling umum. File .tf memang sudah terbentuk, tetapi state belum tahu apa pun. Hasil akhirnya tetap berantakan saat plan.

Mencampur banyak zone dalam satu alur kerja yang tidak rapi

Kalau mengelola banyak domain, biasakan memisahkan file dan proses impor per-zone. Ini membuat debugging jauh lebih mudah.

Menyimpan token di tempat yang tidak aman

API token Cloudflare punya akses yang sensitif. Perlakukan seperti secret lain: jangan ditaruh sembarangan di file yang ikut ter-push ke repository.

Langsung mengedit terlalu banyak hal setelah generate

Sebaiknya jangan terlalu cepat merombak file hasil generate sebelum import selesai. Pastikan dulu resource berhasil dipetakan ke state, baru setelah itu lakukan refactor atau perapian.

Penutup

Mengimpor DNS record Cloudflare ke Terraform bukan sekadar soal mengekspor konfigurasi menjadi file .tf. Inti prosesnya ada pada sinkronisasi antara konfigurasi dan state. Kalau hanya berhenti di tahap generate, Terraform masih akan mengira semua record itu baru.

Urutan yang lebih aman adalah:

  1. siapkan provider Terraform,
  2. buat token Cloudflare,
  3. generate resource dengan cf-terraforming,
  4. import resource ke state,
  5. lalu verifikasi hasilnya lewat terraform plan.

Begitu alur ini selesai, pengelolaan DNS jadi jauh lebih rapi. Perubahan bisa direview, histori lebih jelas, dan risiko perubahan manual yang tidak terdokumentasi bisa ditekan.

Untuk domain yang sudah lama aktif, langkah migrasi seperti ini memang butuh ketelitian. Tetapi setelah sekali beres, manfaat jangka panjangnya sangat terasa.


Tags

#cloudflare#terraform#infrastructureascode

Share

Previous Article
Mengenal Function Compute: Serverless dari Alibaba Cloud
Rona Ariyolo Sitorus

Rona Ariyolo Sitorus

IT Infrastructure Engineer

Table Of Contents

1
Kenapa DNS Cloudflare perlu dikelola dengan Terraform?
2
Gambaran masalah yang sebenarnya ingin diselesaikan
3
Tool yang dipakai: cf-terraforming
4
1. Install cf-terraforming
5
2. Buat API Token Cloudflare
6
3. Siapkan konfigurasi Terraform untuk Cloudflare
7
4. Siapkan environment variable yang dibutuhkan
8
5. Generate resource Terraform dari DNS Cloudflare
9
6. Pahami hasil generate dengan benar
10
7. Kenapa terraform plan masih menampilkan + create?
11
8. Generate skrip import untuk state Terraform
12
9. Verifikasi hasil import
13
Praktik yang sebaiknya dilakukan setelah impor berhasil
14
Kesalahan yang sering terjadi
15
Penutup

Related Posts

Kenapa dan Bagaimana Saya Membangun Blog di Cloud Tanpa Biaya?
March 10, 2026
6 min
© 2026, All Rights Reserved.
Powered By

Quick Links

Advertise with usAbout UsContact Us

Social Media