Program
Selama bertahun-tahun, saya telah bekerja dengan tak terhitung banyaknya file konfigurasi, dan YAML menonjol karena kesederhanaan dan keterbacaannya. Baik saat menyiapkan workflow di Kubernetes, mendefinisikan service di Docker, maupun menyusun permintaan API, YAML membuat konfigurasi kompleks jadi lebih mudah dikelola. Strukturnya yang rapi berbasis indentasi menghilangkan keruwetan format seperti XML sekaligus tetap fleksibel.
Dalam panduan ini, saya akan mengulas sintaks, struktur, fitur lanjutan, dan praktik terbaik YAML agar Anda bisa bekerja dengannya dengan percaya diri.
Apa itu YAML?
YAML (Yet Another Markup Language / YAML Ain’t Markup Language) adalah format serialisasi data yang mengutamakan keterbacaan dan kemudahan penggunaan. Sementara XML menggunakan campuran tag bertingkat mirip HTML dan JSON menggunakan kurung kurawal serta tanda kutip seperti kamus Python, YAML lebih ringkas dan memakai indentasi untuk mendefinisikan struktur, sehingga lebih ramah bagi manusia.
YAML mendukung berbagai tipe data, termasuk skalar (string, angka, boolean), urutan (list), dan pemetaan (pasangan key-value). YAML banyak digunakan dalam file konfigurasi, automasi infrastruktur, dan pertukaran data, terutama pada alat seperti Kubernetes, Docker, dan Ansible.
Selain itu, YAML adalah superset dari JSON, artinya file JSON yang valid dapat diurai sebagai YAML. File YAML biasanya menggunakan ekstensi .yaml atau .yml.
Anda juga dapat mempelajari lebih lanjut tentang YAML di situs web-nya!
Sintaks dan Struktur YAML
Bagian ini akan membahas prinsip dasar sintaks YAML, termasuk pasangan key-value, list, data bertingkat, dan komentar.
Aturan sintaks dasar
Ada beberapa aturan sintaks dasar untuk YAML:
- Indentasi spasi menunjukkan struktur, jadi hindari tab!
- Pasoangan key-value mengikuti struktur
key: value, mirip bahasa lain. - Tanda minus di awal baris menandakan sebuah list.
- Menggunakan
#akan membuat baris komentar.
# Here is an example of YAML
name: John Doe
age: 30
skills:
- Python
- YAML
Pasangan key-value
YAML merepresentasikan data sebagai pasangan key-value, mirip dengan dictionary di Python. Ini sering kali menunjukkan informasi yang diberikan ke berbagai file konfigurasi dan pengaturan. Tidak perlu menandai string atau key dengan tanda kutip; cukup tulis key dan value yang diperlukan:
location: New York
country: USA
security-level: user
List dalam YAML
List direpresentasikan menggunakan tanda minus (-). Ini memungkinkan Anda mencantumkan beberapa objek di bawah satu key. Ini sering ditampilkan secara visual sebagai bullet saat dibaca oleh editor Markup.
fruits:
- Apple
- Banana
- Cherry
Data bertingkat
Struktur bertingkat memungkinkan representasi data hierarkis menggunakan indentasi. Anggap ini seperti dictionary bersarang. Dengan menggunakan indentasi, Anda menunjukkan key mana yang merupakan subset dari yang lain.
person:
name: Alice
details:
age: 25
city: London
Komentar
Komentar diawali dengan # dan diabaikan oleh parser YAML. Komentar ini adalah komentar satu baris.
# This is a comment
username: admin
password: secret
Fitur Lanjutan YAML
YAML menyertakan fitur-fitur kuat seperti string multi-baris, tipe data, serta anchor yang membuat dokumen lebih efisien dan terstruktur. Di bagian ini, kita akan mengeksplorasi kemampuan ini dengan contoh praktis.
String multi-baris
YAML mendukung string multi-baris menggunakan | (literal block) atau > (folded block).
- Literal block
|akan membuat baris baru\nuntuk setiap jeda baris. - Folded block
>hanya akan membuat baris baru untuk jeda baris berturut-turut.
literal: |
This is a
multi-line string.
folded: >
This is another
multi-line string.
Hal di atas lebih mudah dipahami dengan menunjukkan keluarannya.
- Untuk
|(literal block):
This is a
multi-line string.
- Untuk
>(folded block):
This is another multi-line string.
Tipe data dalam YAML
YAML mendukung berbagai tipe data, termasuk string, angka, boolean, dan nilai null. YAML secara otomatis mendeteksi tipe berdasarkan pemformatan tetapi juga memungkinkan definisi tipe secara eksplisit.
Contoh berikut menunjukkan penggunaan tipe data dasar dalam YAML:
string_implicit: Hello, YAML! # No quotes needed unless necessary
string_double_quoted: "Supports escape sequences like \n and \t"
string_single_quoted: 'Raw text, no escape sequences'
integer: 42 # Whole numbers
float: 3.14 # Numbers with decimals
boolean_true: true
boolean_false: false
null_value: null # Null value
null_tilde: ~ # Another way to represent null
YAML memungkinkan deklarasi tipe eksplisit menggunakan !!type bila diperlukan:
explicit_string: !!str 123 # Forces 123 to be a string
explicit_integer: !!int "42" # Forces "42" to be an integer
explicit_float: !!float "3.14" # Forces "3.14" to be a float
Karena YAML sering digunakan untuk data terstruktur, YAML mendukung:
- List (sequence):
fruits:
- Apple
- Banana
- Cherry
- Dictionary (mapping):
person:
name: Alice
age: 30
is_student: false
Anchor dan alias
YAML memungkinkan Anda mendefinisikan nilai yang dapat digunakan kembali menggunakan anchor (&) dan mereferensikannya kemudian menggunakan alias (*). Ini membantu mengurangi redundansi dalam file konfigurasi sehingga lebih ringkas dan mudah dipelihara.
defaults: &default_settings
retries: 3
timeout: 30
server1:
host: example.com
retries: *default_settings # Reuses the retries value from defaults
Sintaks <<: memungkinkan penggabungan pasangan key-value dari sebuah anchor ke dalam mapping lain. Jika sebuah key ada di keduanya, nilai baru akan menimpa nilai asli.
defaults: &default_settings
retries: 3
timeout: 30
server1:
<<: *default_settings # Merges all key-value pairs from default_settings
host: example.com # This key is added to the merged data
Berikut struktur akhir yang dihasilkan:
server1:
retries: 3
timeout: 30
host: example.com
Anchor dan alias sangat berguna dalam file konfigurasi besar di mana pengulangan nilai secara manual tidak efisien. Fitur ini membantu menjaga file YAML tetap DRY (Don't Repeat Yourself) dan memudahkan pembaruan.
Use Case Umum untuk YAML
YAML banyak digunakan dalam pengembangan perangkat lunak, automasi infrastruktur, dan manajemen API. Sintaks yang mudah dibaca menjadikannya format pilihan untuk file konfigurasi, serialisasi data, dan Infrastructure as Code (IaC). Mari kita telusuri penerapan yang paling umum.
File konfigurasi
YAML banyak digunakan untuk konfigurasi dalam aplikasi seperti Docker Compose, Kubernetes, dan pipeline CI/CD. Kemudahannya untuk dipahami membuat siapa pun dapat mempelajari file set-up YAML Docker dan mengerti apa yang terjadi.
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
environment:
- NGINX_HOST=localhost
- NGINX_PORT=80
Keterbacaan YAML serta dukungan untuk anchor dan alias membantu mengurangi pengulangan, sehingga lebih mudah dipelihara dibandingkan JSON atau XML.
Pelajari lebih lanjut tentang YAML dan penggunaannya dalam Docker di kursus Docker tingkat menengah ini.
Serialisasi dan transfer data
YAML digunakan untuk menserialisasi data bagi API dan alat manajemen konfigurasi dengan mengonversi struktur data kompleks menjadi format yang mudah dibaca manusia dan mudah diurai mesin.
Sebagai contoh, body permintaan API yang diformat dalam YAML:
user:
id: 123
name: "John Doe"
email: "johndoe@example.com"
active: true
Struktur berbasis indentasi YAML menghilangkan sintaks yang tidak perlu, menjadikannya ringan, mudah dibaca, dan mudah diubah dibandingkan JSON.
Infrastructure as Code (IaC)
Alat manajemen konfigurasi seperti Ansible dan Kubernetes memanfaatkan YAML untuk mendefinisikan state sistem, mengotomatisasi proses, dan memastikan konsistensi di berbagai environment.
- Di Ansible, YAML digunakan untuk menulis playbook yang mendefinisikan state sistem, tugas, dan dependensi, memastikan komponen infrastruktur dikonfigurasi secara konsisten.
- Kubernetes menggunakan manifest YAML untuk mendefinisikan resource seperti pod, service, dan deployment, sehingga memungkinkan orkestrasi otomatis aplikasi terkontainerisasi.
Berikut contoh konfigurasi Pod Kubernetes:
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: app-container
image: my-app:latest
ports:
- containerPort: 8080
Pelajari lebih lanjut tentang bagaimana YAML digunakan dalam Kubernetes di kursus Introduction to Kubernetes ini.
Dokumentasi API
Spesifikasi API seperti OpenAPI dan Swagger menggunakan YAML untuk mendefinisikan endpoint dan struktur data dengan cara yang mudah dibaca. YAML digunakan untuk menguraikan metode API, parameter permintaan, format respons, dan metode autentikasi.
Berikut contoh spesifikasi OpenAPI dalam YAML:
openapi: 3.0.0
info:
title: User API
version: "1.0"
paths:
/users:
get:
summary: Retrieve a list of users
responses:
"200":
description: Successful response
Spesifikasi OpenAPI, misalnya, menggunakan YAML untuk mendokumentasikan RESTful API. Ini memungkinkan mereka menyediakan cetak biru yang jelas untuk menghasilkan SDK klien, dokumentasi API interaktif, dan pengujian otomatis. Format terstruktur ini memastikan konsistensi di seluruh implementasi API.
Bekerja dengan File YAML
YAML banyak digunakan untuk file konfigurasi, automasi, dan serialisasi data, tetapi karena mengandalkan indentasi, pemformatan yang benar sangat penting. Berikut cara membaca, menulis, memvalidasi, dan mengedit YAML secara efektif.
Membaca dan menulis YAML di Python
Library PyYAML di Python dapat mengurai dan membuat YAML.
Bayangkan Anda memiliki file konfigurasi YAML berikut:
database:
host: localhost
port: 5432
user: admin
password: secret
Berikut cara Anda dapat bekerja dengan file konfigurasi di Python:
import yaml
# Load YAML data
with open("config.yaml", "r") as file:
data = yaml.safe_load(file) # safe_load prevents arbitrary code execution
# Modify data (optional)
data["database"]["user"] = "new_user"
# Write YAML data
with open("output.yaml", "w") as file:
yaml.dump(data, file, default_flow_style=False)
Jika Anda tertarik bekerja dengan data JSON di Python, lihat tutorial Python JSON yang komprehensif.
Memvalidasi file YAML
Untuk memastikan struktur yang benar, Anda dapat menggunakan alat untuk memeriksa tab yang menggantikan spasi atau masalah aneh seperti karakter berulang, masalah sintaks, dan spasi di akhir baris.
Berikut beberapa validator YAML yang populer:
- Alat CLI: yamllint (linter berbasis Python)
- Validator online: YAML Lint, YAML Validator oleh JSON Formatter
Mengedit YAML
Anda dapat menulis dan mengedit YAML di editor teks apa pun, tetapi alat linter dan penyorotan sintaks meningkatkan keterbacaan.
Beberapa editor favorit saya:
- VS Code (dengan plugin YAML)
- PyCharm (dukungan bawaan)
- Sublime Text (dengan penyorotan sintaks YAML)
Kesalahan Umum yang Harus Dihindari di YAML
Terlepas dari kesederhanaannya, Anda tetap bisa dengan mudah menemui masalah dan typo saat bekerja dengan YAML. Bagian ini membahas kesalahan-kesalahan tersebut dan memberikan praktik terbaik untuk menulis file yang rapi dan benar. Ini juga alasan mengapa saya menyarankan menggunakan linter atau editor teks!
Mencampur tab dan spasi
YAML bergantung pada spasi untuk indentasi—jangan pernah mencampur spasi dan tab. Tab akan langsung merusak skrip YAML Anda. Ini memang keputusan yang disengaja, karena sistem yang berbeda membaca tab secara berbeda, dan untuk meminimalkan dampak, spasi menjadi pilihan yang disarankan.
Indentasi tidak benar
Pastikan indentasi konsisten untuk menghindari error parsing. Karena indentasi adalah satu-satunya metode YAML untuk menandai hierarki, parsing yang tidak tepat dapat menimbulkan masalah pada kode Anda. Anda bisa saja tanpa sengaja menyelipkan pasangan key: value ke tempat yang salah, jadi perhatikan indentasi!
Lupa memberi tanda kutip untuk karakter khusus
Gunakan tanda kutip untuk string yang berisi karakter khusus atau spasi. Hal seperti backslash, koma, tanda seru, dan seterusnya memerlukan tanda kutip agar dibaca sebagai string.
path: "/home/user/documents"
message: "Hello, World!"
Dengan melakukan validasi yang tepat, pengeditan terstruktur, dan menggunakan PyYAML di Python, Anda dapat bekerja secara efisien dengan file YAML sambil menghindari jebakan umum.
Kesimpulan
YAML adalah format yang kuat namun sederhana dan banyak digunakan dalam konfigurasi, serialisasi data, dan automasi infrastruktur. Dengan memahami sintaks, struktur, dan praktik terbaiknya, Anda dapat bekerja secara efisien dengan YAML di berbagai aplikasi.
Jika Anda tertarik menerapkan YAML dalam skenario dunia nyata:
- Pelajari bagaimana YAML digunakan dalam workflow CI/CD melalui kursus CI/CD for Machine Learning ini.
- Jelajahi bagaimana API menggunakan YAML dalam spesifikasinya di kursus Introduction to APIs in Python ini.
- Dalami lebih jauh kontainerisasi dan automasi infrastruktur di track Containerization and Virtualization ini.
FAQs
Apakah YAML bersifat universal?
Selama sumber data atau target dapat membaca YAML, YAML adalah metode yang layak dan berguna untuk menserialisasi dan mengirim data. Pastikan Anda mengirim data ke target yang dapat memproses YAML.
Apakah YAML aman? Dapatkah file YAML menimbulkan risiko keamanan?
YAML sendiri hanyalah format data, tetapi risiko keamanan muncul saat mengurai file YAML yang tidak tepercaya. Metode default yaml.load() di PyYAML Python dapat mengeksekusi kode sewenang-wenang yang disisipkan dalam YAML, sehingga berisiko. Sebagai gantinya, selalu gunakan yaml.safe_load() untuk mencegah eksekusi tidak disengaja dari kode berbahaya. Demikian pula, saat menggunakan YAML dalam aplikasi, pastikan validasi skema yang ketat untuk menghindari kerentanan keamanan.
Dapatkah YAML mendukung variabel lingkungan?
Ya! Meskipun YAML sendiri tidak secara langsung memproses variabel lingkungan, banyak alat (seperti Docker Compose dan Kubernetes) yang memungkinkan referensi variabel lingkungan di dalam file YAML.
Bagaimana cara menangani komentar di YAML?
YAML mendukung komentar satu baris menggunakan simbol #, tetapi tidak mendukung komentar multi-baris. Jika Anda memerlukan komentar multi-baris, solusi umum adalah menggunakan key semu seperti _comment. Namun, ini hanya konvensi dan tidak akan diabaikan oleh parser YAML kecuali aplikasi Anda secara khusus memfilternya.
Saya seorang data scientist dengan pengalaman dalam analisis spasial, machine learning, dan pipeline data. Saya pernah bekerja dengan GCP, Hadoop, Hive, Snowflake, Airflow, dan proses data science/engineering lainnya.

