HCL dan HOCON adalah dua bahasa konfigurasi yang akan Anda temui dalam pengembangan infrastruktur dan aplikasi: HCL di ekosistem HashiCorp (Terraform, Packer, Vault) dan HOCON di ekosistem JVM (Akka, Play Framework, alat Lightbend). Keduanya diciptakan untuk menyelesaikan masalah yang sama (JSON terlalu bertele-tele dan kurang terbaca untuk konfigurasi kompleks), tetapi mengambil pendekatan berbeda dan tidak bisa saling menggantikan. Panduan ini menjelaskan kedua format dari dasar: bagaimana bentuknya, di mana dipakai, bagaimana dibandingkan, dan kapan memilih masing-masing.
Apa itu berkas HCL?
HCL adalah singkatan dari HashiCorp Configuration Language. Ini bahasa konfigurasi khusus domain yang dibuat HashiCorp pada 2014, awalnya untuk mendukung Terraform. Berkas HCL memakai ekstensi `.hcl` (atau `.tf` khusus Terraform) dan dirancang agar mudah dibaca manusia, bisa diurai mesin, dan kompatibel dengan JSON: setiap dokumen JSON yang valid juga HCL yang valid.
HCL bukan bahasa pemrograman. Ia tidak bisa menghitung, mendefinisikan fungsi, atau mengendalikan alur program seperti Python atau JavaScript. Ia adalah bahasa konfigurasi deklaratif: Anda mendeskripsikan keadaan infrastruktur yang diinginkan, dan alat yang membaca HCL (Terraform, Packer, Vault, Consul, Nomad) menentukan cara mencapainya. Batasan ini disengaja: ia membuat konfigurasi HCL dapat diprediksi dan diaudit.
Dasar sintaks HCL
HCL memakai struktur berbasis blok dengan atribut, blok bersarang, dan ekspresi. Atribut adalah pasangan kunci-nilai; blok mengelompokkan atribut terkait dan bisa bersarang. Komentar memakai `#` atau `//` untuk satu baris dan `/* */` untuk beberapa baris.
# Komentar satu baris
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t3.micro"
tags = {
Name = "web-server"
Environment = "production"
}
# Blok bersarang
root_block_device {
volume_size = 20
encrypted = true
}
}Di mana HCL dipakai
- Terraform: konsumen HCL utama; setiap berkas `.tf` adalah HCL yang mendeskripsikan infrastruktur cloud dan on-premises.
- Packer: HCL2 (versi 2 bahasa ini) dipakai untuk mendefinisikan build image mesin untuk AMI AWS, image GCP, dan lainnya.
- Vault: HCL dipakai pada berkas kebijakan yang mendefinisikan aturan kontrol akses di HashiCorp Vault.
- Consul: berkas konfigurasi service mesh, pemeriksaan kesehatan, dan definisi layanan memakai HCL.
- Nomad: spesifikasi pekerjaan orkestrasi beban kerja ditulis dalam HCL.
Note
Apa itu HOCON?
HOCON adalah singkatan dari Human-Optimized Config Object Notation. Ia dibuat Typesafe (kini Lightbend) pada 2011 sebagai format konfigurasi pustaka Typesafe Config, yang menggerakkan Akka, Play Framework, Lagom, dan framework berbasis JVM lain. Berkas HOCON memakai ekstensi `.conf` dan merupakan superset ketat JSON: setiap berkas JSON yang valid juga HOCON yang valid.
HOCON dirancang untuk konfigurasi aplikasi saat berjalan, bukan untuk mendefinisikan infrastruktur. Fitur unggulannya adalah substitusi: kemampuan merujuk nilai konfigurasi lain dalam berkas yang sama memakai sintaks substitusi, dengan merujuk lewat jalur ke nilai konfigurasi atau variabel lingkungan lain. Ini membuat HOCON sangat cocok untuk konfigurasi berlapis: berkas dasar menetapkan nilai default, berkas khusus lingkungan menimpa nilai tertentu, dan substitusi mengambil dari variabel lingkungan atau sumber lain.
Dasar sintaks HOCON
# Konfigurasi aplikasi
app {
name = "my-service"
version = "1.0.0"
server {
host = "0.0.0.0"
port = 8080
# Substitusi dari variabel lingkungan
port = ${?APP_PORT}
}
database {
url = "jdbc:postgresql://localhost:5432/mydb"
# Substitusi dari nilai konfigurasi lain
connection-pool = ${app.server.port}
}
}
# Daftar
allowed-origins = ["https://example.com", "https://api.example.com"]Fitur HOCON di luar JSON
- Komentar: komentar satu baris dengan `#` dan `//`; JSON tidak mendukung komentar.
- Substitusi: `${path.to.value}` merujuk kunci lain; `${?ENV_VAR}` gagal secara diam bila variabel tidak didefinisikan.
- Direktif include: include "other.conf" menggabungkan berkas konfigurasi eksternal saat parsing.
- Penggabungan objek: kunci duplikat menggabungkan nilainya alih-alih menimpanya; memungkinkan konfigurasi berlapis.
- Fleksibilitas kunci-nilai: mendukung key = value, key : value, dan key value (dipisah spasi) secara setara.
- String tanpa tanda kutip: nilai string sederhana tidak perlu tanda kutip kecuali berisi karakter khusus.
Tip
HCL vs HOCON: perbedaan utama
HCL dan HOCON menyelesaikan masalah serupa dari sudut berbeda. Keduanya lebih mudah dibaca daripada JSON untuk konfigurasi kompleks, keduanya mendukung komentar, dan keduanya punya lapisan kompatibilitas JSON. Namun tujuan desain, kasus penggunaan utama, dan integrasi ekosistemnya cukup berbeda sehingga Anda jarang memilih di antara keduanya: alat yang Anda pakai memilih untuk Anda.
HCL mendeskripsikan infrastruktur apa yang seharusnya ada. HOCON mendeskripsikan bagaimana aplikasi seharusnya berperilaku. Perbedaan tujuan ini membentuk setiap keputusan desain di kedua bahasa.
| Aspek | HCL | HOCON |
|---|---|---|
| Dibuat oleh | HashiCorp (2014) | Typesafe/Lightbend (2011) |
| Ekstensi berkas | .hcl, .tf, .pkr.hcl | .conf, .json (subset JSON) |
| Penggunaan utama | Infrastruktur sebagai kode | Konfigurasi aplikasi saat berjalan |
| Ekosistem | Terraform, Packer, Vault | Akka, Play, Lagom, Spark |
| Kompatibel JSON | ✓ JSON adalah HCL valid | ✓ JSON adalah HOCON valid |
| Komentar | ✓ # dan // dan /* */ | ✓ # dan // |
| Substitusi | ✗ Variabel dipakai berbeda | ✓ ${path} dan ${?ENV_VAR} |
| Menyertakan berkas | ✗ Memakai modul | ✓ include "file.conf" |
| Penggabungan objek | ✗ Blok berurutan | ✓ Kunci duplikat digabung |
| Ekspresi/logika | ✓ Ekspresi, perulangan for | ✗ Hanya nilai deklaratif |
| Struktur blok | ✓ Blok bernama (resource "") | ✗ Hanya objek bersarang |
Perbedaan konseptual kuncinya
HCL imperatif soal struktur: blok memiliki tipe dan label (`resource "aws_instance" "web"`) yang membawa makna semantik yang diinterpretasikan alat. Anda mendeklarasikan entitas bertipe tertentu dengan properti tertentu. HOCON murni format data: ia mendefinisikan struktur hirarkis kunci-nilai yang dibaca aplikasi saat mulai. Tidak ada konsep blok bertipe; semuanya kunci yang menunjuk ke nilai, objek, atau daftar.
Note
Bekerja dengan berkas HCL dalam praktik
Berkas HCL paling sering diedit sebagai bagian dari proyek Terraform, meski prinsip yang sama berlaku untuk Packer, Vault, dan Nomad. Ketepatan format dan struktur penting karena alat HashiCorp memvalidasi HCL secara ketat pada fase plan atau validate, dan blok HCL yang salah bentuk menghasilkan galat yang sulit dilacak jika berkasnya tidak diindentasi konsisten.
Format berkas HCL agar konsisten
Format HCL di Aback Tools memformat dan mempercantik berkas HCL dengan indentasi 2 spasi, jarak atribut yang konsisten, dan struktur blok yang rapi. Tempelkan berkas `.hcl` atau `.tf` apa pun dan dapatkan keluaran yang konsisten, siap dipakai dengan Terraform, Packer, Vault, Consul, atau Nomad, seluruhnya di browser.
Konversi HCL ke YAML bila perlu
Ketika sistem CI, alat dokumentasi, atau pemroses pipeline membutuhkan konfigurasi HCL dalam format YAML, Konverter HCL ke YAML menangani penerjemahan strukturalnya. Ini umum saat mengekstrak definisi variabel Terraform untuk dipakai di playbook Ansible atau config map Kubernetes.
Validasi penamaan sumber daya HCL Terraform
Nama sumber daya HCL di Terraform harus mengikuti konvensi penamaan yang konsisten di seluruh tim agar kode tetap mudah ditinjau. Pemeriksa konvensi penamaan sumber daya Terraform di `/tools/data/validators/terraform-resource-naming-convention-checker` memvalidasi bahwa nama sumber daya, variabel, dan modul Anda mengikuti gaya yang dipilih sebelum Anda menjalankan `terraform plan`.
Format HCL
Format dan percantik berkas HCL atau Terraform apa pun dengan indentasi 2 spasi, jarak atribut yang konsisten, dan struktur blok yang rapi, di browser Anda.
Bekerja dengan berkas HOCON dalam praktik
Di proyek JVM, berkas konfigurasi HOCON biasanya berada di `src/main/resources/application.conf`. Aplikasi Akka memakai HOCON untuk konfigurasi sistem aktor, pengaturan dispatcher, dan konfigurasi ekstensi. Play Framework memakainya untuk rute, koneksi basis data, dan pengaturan aplikasi. Formatnya permisif (string tanpa tanda kutip, operator penetapan yang fleksibel, komentar), tetapi pemformatan yang memperhatikan spasi membuat berkas lebih mudah dibaca dan dipelihara.
Memformat berkas HOCON
Format HOCON di Aback Tools memformat berkas konfigurasi HOCON dengan indentasi 4 spasi yang konsisten, jarak kunci-nilai yang tepat, penanganan substitusi yang rapi, dan konvensi Typesafe Config. Ini sangat berguna saat mengedit berkas konfigurasi Akka atau Play besar yang pemformatannya jadi tidak konsisten akibat banyak kontributor.
Mengonversi HOCON ke YAML
Ketika sebuah alat di pipeline Anda mengharapkan YAML tetapi konfigurasi aplikasi Anda HOCON, Konverter HOCON ke YAML menerjemahkan struktur kunci-nilai HOCON menjadi padanan YAML. Perhatikan bahwa fitur khusus HOCON (substitusi, direktif include, dan kunci yang digabung) diselesaikan sebelum konversi, sehingga keluaran YAML mencerminkan konfigurasi gabungan akhir, bukan sintaks templat HOCON mentah.
Warning
Format HOCON
Format berkas konfigurasi HOCON dengan indentasi 4 spasi yang konsisten, penanganan substitusi yang tepat, dan konvensi Typesafe Config, sepenuhnya di browser Anda.
HCL dan HOCON bersama format konfigurasi lain
HCL dan HOCON hidup berdampingan dengan lanskap format konfigurasi yang lebih luas. Memilih yang tepat jarang merupakan keputusan bebas: perkakas yang Anda pakai menentukan formatnya. Namun memahami di mana setiap format cocok membantu Anda menalar tentang portabilitas konfigurasi dan kompromi perkakas.
Perbandingan format konfigurasi utama
| Format | Mudah dibaca | Komentar | Terbaik untuk |
|---|---|---|---|
| JSON | ✗ Bertele-tele | ✗ Tidak ada | API, pertukaran data |
| YAML | ✓ Sangat | ✓ # | K8s, CI/CD, konfigurasi umum |
| TOML | ✓ Baik | ✓ # | Konfigurasi aplikasi, Rust, alat Python |
| INI | ✓ Sederhana | ✓ # ; | Kunci-nilai sederhana, aplikasi lama |
| HCL | ✓ Baik | ✓ # // | Infrastruktur sebagai kode |
| HOCON | ✓ Baik | ✓ # // | Konfigurasi aplikasi JVM, Akka, Play |
HCL dan YAML bersama dalam alur kerja Terraform
Dalam praktik, proyek Terraform memakai HCL untuk semua definisi infrastruktur, sementara pipeline CI/CD yang menjalankan Terraform sering dikonfigurasi dalam YAML (GitHub Actions, GitLab CI, CircleCI). Keduanya hidup berdampingan tanpa konflik: HCL adalah masukan Terraform, YAML adalah masukan pipeline. Jika Anda bekerja dengan keduanya, disiplin pemformatan yang sama berlaku. Untuk galat YAML di berkas CI Anda, alur pada Cara Mendeteksi dan Memperbaiki Galat YAML langsung bisa dipakai.
HOCON, TOML, dan YAML untuk konfigurasi aplikasi
Untuk aplikasi non-JVM, TOML dan YAML lebih umum dipakai daripada HOCON. TOML adalah standar untuk Rust (Cargo.toml), pengemasan Python (pyproject.toml), dan situs statis Hugo. YAML mendominasi Kubernetes, Ansible, Docker Compose, dan sebagian besar perkakas cloud native. HOCON adalah pilihan tepat khusus ketika runtime Anda adalah framework JVM yang menyertakan Typesafe Config: Anda mendapatkan fitur HOCON gratis, dan melawan framework demi format lain menimbulkan lebih banyak masalah daripada menyelesaikannya.
Artikel terkait tentang format
Jika Anda mengevaluasi format konfigurasi untuk proyek baru, artikel pendamping di seri ini membahas alternatif terdekatnya. Cara Membuat Berkas INI membahas format konfigurasi paling sederhana. Cara Berkomentar di YAML dengan Benar membahas detail sintaks YAML. Dan Apa yang Sebenarnya Diperiksa terraform validate? membahas bagaimana galat HCL muncul khususnya dalam alur kerja Terraform.
Tip
Key takeaways
- HCL (HashiCorp Configuration Language) adalah format deklaratif untuk infrastruktur sebagai kode, dipakai Terraform, Packer, Vault, Consul, dan Nomad. HCL2 adalah versi terkini.
- HOCON (Human-Optimized Config Object Notation) adalah superset JSON untuk konfigurasi aplikasi JVM saat berjalan, dipakai Akka, Play Framework, dan alat Lightbend.
- Kedua format mendukung komentar dan kompatibel JSON, tetapi tidak bisa saling menggantikan: alat yang Anda pakai menentukan format yang dipakai.
- Fitur kunci HCL adalah blok bernama bertipe (`resource "aws_instance" "web"`); fitur kunci HOCON adalah substitusi variabel (`${?ENV_VAR}`) dan penggabungan objek.
- Gunakan Format HCL untuk pemformatan HCL yang konsisten dan Format HOCON untuk HOCON: keduanya berjalan di browser tanpa mengunggah berkas.
- Untuk proyek non-JVM dan non-HashiCorp, TOML atau YAML biasanya lebih baik daripada HCL atau HOCON karena dukungan parser lebih luas dan tanpa keterikatan ekosistem.