Lompat ke konten
Aback Tools Logo

Apa Itu HCL dan HOCON? Bahasa Konfigurasi Dijelaskan

HCL dan HOCON dijelaskan: HCL menggerakkan Terraform, Packer, dan Vault; HOCON menggerakkan Akka dan Play. Bandingkan sintaks, substitusi, kompatibilitas JSON, dan kapan memakainya.

DH
Tutorials & How-Tos13 menit baca2,750 kata

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.

2014Rilis awal HCLOleh HashiCorp untuk Terraform
2011Rilis awal HOCONOleh Typesafe untuk Akka
4+Alat besar memakai HCLTerraform, Packer, Vault, Consul

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.

Struktur dasar HCL
hcl
# 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

HCL punya dua versi: HCL1 (asli, dipakai Terraform awal) dan HCL2 (dirilis 2019, dipakai Terraform 0.12+). HCL2 memperkenalkan evaluasi ekspresi yang sesungguhnya, ekspresi for, blok dinamis, dan sintaks yang lebih ketat. Jika Anda menemukan kode Terraform lama yang tidak konsisten memakai `=` untuk menetapkan atribut, kemungkinan itu HCL1. Semua alat HashiCorp modern memakai HCL2.

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

Struktur dasar HOCON
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

Sintaks substitusi HOCON adalah fitur paling ampuh untuk penerapan di produksi. Menetapkan port dengan substitusi yang merujuk APP_PORT dan nilai default 8080 di atasnya membuat aplikasi memakai port 8080 saat pengembangan dan nilai APP_PORT di produksi, tanpa mengubah kode.

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.

- Filosofi desain HCL dan HOCON
AspekHCLHOCON
Dibuat olehHashiCorp (2014)Typesafe/Lightbend (2011)
Ekstensi berkas.hcl, .tf, .pkr.hcl.conf, .json (subset JSON)
Penggunaan utamaInfrastruktur sebagai kodeKonfigurasi aplikasi saat berjalan
EkosistemTerraform, Packer, VaultAkka, 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

Anda tidak bisa memakai HCL di tempat yang mengharapkan HOCON, begitu pula sebaliknya. Aplikasi Akka yang dikonfigurasi membaca `application.conf` akan memakai parser HOCON/Typesafe Config; memberinya berkas HCL akan menghasilkan galat parsing. Sama halnya, Terraform hanya menerima HCL2 (atau JSON) untuk berkas konfigurasinya: HOCON bukan masukan yang valid untuk Terraform.

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.

1

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.

2

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.

3

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.

Open tool

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

Substitusi dan direktif include HOCON diselesaikan saat parsing oleh pustaka Typesafe Config, bukan secara statis di dalam berkas. Ketika Anda mengonversi HOCON ke YAML dengan alat, substitusi yang merujuk variabel lingkungan akan muncul sebagai nilai literalnya atau dihilangkan jika variabel itu tidak diatur di lingkungan konversi. Verifikasi keluarannya sebelum dipakai di produksi.

Format HOCON

Format berkas konfigurasi HOCON dengan indentasi 4 spasi yang konsisten, penanganan substitusi yang tepat, dan konvensi Typesafe Config, sepenuhnya di browser Anda.

Open tool

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

FormatMudah dibacaKomentarTerbaik untuk
JSON✗ Bertele-tele✗ Tidak adaAPI, 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

Jika Anda menulis pustaka atau alat baru yang membutuhkan format konfigurasi, pertimbangkan TOML sebelum HCL atau HOCON. TOML punya dukungan parser luas di semua bahasa utama, spesifikasi sederhana, dan tanpa keterikatan ekosistem. Sisakan HCL untuk perkakas HashiCorp dan HOCON untuk integrasi JVM/Typesafe Config yang memang mengharapkan format itu.

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.

Pertanyaan yang sering diajukan

Berkas HCL adalah berkas konfigurasi yang ditulis dalam HashiCorp Configuration Language, format deklaratif yang dibuat HashiCorp pada 2014. Berkas HCL memakai ekstensi .hcl (atau .tf untuk Terraform, .pkr.hcl untuk Packer) dan mendeskripsikan keadaan infrastruktur yang diinginkan memakai blok bernama bertipe serta penetapan atribut. Setiap dokumen JSON yang valid juga HCL2 yang valid, sehingga migrasinya mudah. HCL dipakai oleh Terraform, Packer, Vault, Consul, dan Nomad.

HOCON adalah singkatan dari Human-Optimized Config Object Notation. Ini format konfigurasi yang dibuat Typesafe (kini Lightbend) pada 2011 sebagai superset JSON. Berkas HOCON memakai ekstensi .conf dan mendukung komentar, substitusi variabel (${?ENV_VAR}), direktif include, serta penggabungan objek. HOCON adalah format konfigurasi asli untuk Akka, Play Framework, Lagom, dan framework JVM lain yang memakai pustaka Typesafe Config.

HCL untuk infrastruktur sebagai kode: ia memakai blok bernama bertipe untuk mendeklarasikan sumber daya infrastruktur dan diinterpretasikan oleh alat HashiCorp. HOCON untuk konfigurasi aplikasi saat berjalan: ia memakai struktur hirarkis kunci-nilai dengan substitusi dan penggabungan, diinterpretasikan oleh pustaka Typesafe Config. Keduanya kompatibel JSON dan mendukung komentar, tetapi tidak bisa saling menggantikan: Terraform mengharapkan HCL, Akka mengharapkan HOCON, dan tidak ada parser yang menerima format yang lain.

Tidak. Kubernetes dan GitHub Actions memakai parser YAML yang mengharapkan sintaks YAML. HCL memakai sintaks berbeda (blok bertipe, nama atribut tanpa tanda kutip, notasi daftar berbeda) yang bukan YAML valid. Alat tersebut tidak punya dukungan parser HCL bawaan. Sama halnya, Anda tidak bisa memakai HOCON untuk manifes Kubernetes. Jika perlu menjembatani HCL ke alat berbasis YAML, gunakan Konverter HCL ke YAML untuk menghasilkan representasi YAML dari data konfigurasi Anda.

HCL adalah bahasa konfigurasi yang dipakai Terraform, tetapi HCL bukan Terraform. HCL adalah bahasa konfigurasi serba guna yang juga dipakai alat HashiCorp lain: Packer, Vault, Consul, dan Nomad semuanya membaca berkas HCL. Terraform adalah alat penyediaan infrastruktur yang kebetulan memakai HCL sebagai format konfigurasinya. Saat orang menyebut «berkas Terraform», maksudnya berkas .tf yang ditulis dalam HCL2, tetapi HCL sendiri adalah spesifikasi bahasa mandiri yang diterbitkan HashiCorp.

Ya. Setiap berkas JSON yang valid juga HOCON yang valid: parser HOCON menerima sintaks JSON tanpa perubahan. HOCON memperluas JSON dengan menambahkan komentar (# dan //), koma dan tanda kutip opsional untuk string sederhana, penetapan kunci-nilai dengan = atau :, substitusi (${path}), direktif include, dan penggabungan objek ketika kunci yang sama muncul beberapa kali. Kompatibilitas JSON ini berarti Anda bisa mulai dari konfigurasi JSON dan bertahap memakai fitur HOCON tanpa menulis ulang berkasnya.

Untuk berkas HCL, gunakan Format HCL di Aback Tools pada /tools/data/formatters/hcl-formatter: ia menerapkan indentasi 2 spasi, jarak atribut yang konsisten, dan struktur blok yang rapi. Untuk berkas Terraform khususnya, perintah resmi `terraform fmt` juga memformat berkas .tf. Untuk berkas HOCON, gunakan Format HOCON pada /tools/data/formatters/hocon-formatter untuk indentasi 4 spasi yang konsisten dan konvensi Typesafe Config. Kedua alat berjalan di browser tanpa perlu mengunggah berkas.

Gunakan HOCON bila Anda membangun aplikasi JVM dengan framework yang sudah menyertakan Typesafe Config (Akka, Play, Lagom): dukungan HOCON Anda dapatkan gratis dan dokumentasi framework mengasumsikannya. Gunakan YAML bila membangun aplikasi non-JVM, mengontainerisasi dengan Docker/Kubernetes, atau memakai framework seperti Spring Boot yang mendukung YAML secara asli. Mencampur format dalam satu proyek menciptakan kerumitan perkakas yang tidak perlu: selaraskan format konfigurasi dengan yang diharapkan framework runtime Anda secara asli.

ShareXLinkedIn