Program
Selama bertahun-tahun, saya telah bekerja dengan tak terhitung banyaknya berkas konfigurasi, dan YAML menonjol karena kesederhanaan serta keterbacaannya. Baik saat menyiapkan alur kerja di Kubernetes, mendefinisikan layanan di Docker, maupun menyusun permintaan API, YAML membuat konfigurasi yang kompleks menjadi lebih mudah dikelola. Strukturnya yang bersih berbasis indentasi menghilangkan keruwetan format seperti XML namun tetap fleksibel.
Dalam panduan ini, saya akan memandu Anda melalui sintaks, struktur, fitur lanjutan, dan praktik terbaik YAML agar Anda dapat menggunakannya 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 bertumpuk mirip HTML dan JSON menggunakan kurung kurawal serta tanda kutip seperti kamus Python, YAML lebih ringkas dan menggunakan indentasi untuk mendefinisikan struktur, sehingga lebih ramah bagi manusia.
YAML mendukung berbagai tipe data, termasuk skalar (string, angka, boolean), sekuens (daftar), dan pemetaan (pasangan kunci-nilai). YAML banyak digunakan dalam berkas konfigurasi, otomatisasi infrastruktur, dan pertukaran data, terutama pada alat seperti Kubernetes, Docker, dan Ansible.
Selain itu, YAML adalah superset dari JSON, artinya berkas JSON yang valid dapat diurai sebagai YAML. Berkas YAML biasanya memiliki 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-prinsip dasar sintaks YAML, termasuk pasangan kunci-nilai, daftar, data bertingkat, dan komentar.
Aturan sintaks dasar
Ada beberapa aturan sintaks dasar untuk YAML:
- Indentasi spasi menunjukkan struktur, jadi hindari tab!
- Pasangan kunci-nilai mengikuti struktur
key: value, mirip dengan bahasa lain. - Penggunaan tanda minus di awal baris menandakan sebuah daftar.
- Menggunakan
#akan membuat baris komentar.
# Here is an example of YAML
name: John Doe
age: 30
skills:
- Python
- YAML
Pasangan kunci-nilai
YAML merepresentasikan data sebagai pasangan kunci-nilai, mirip dengan dictionary di Python. Ini sering kali menunjukkan informasi yang diberikan ke berbagai berkas konfigurasi dan pengaturan. Tidak perlu menandai string atau kunci dengan tanda kutip; cukup tulis kunci dan nilai yang diperlukan:
location: New York
country: USA
security-level: user
Daftar di YAML
Daftar direpresentasikan menggunakan tanda minus (-). Ini memungkinkan Anda mencantumkan beberapa objek di bawah satu kunci. 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 bertingkat. Dengan menggunakan indentasi, Anda menunjukkan kunci mana yang merupakan subset dari kunci lainnya.
person:
name: Alice
details:
age: 25
city: London
Komentar
Komentar dimulai dengan # dan diabaikan oleh parser YAML. Komentar ini berupa komentar satu baris.
# This is a comment
username: admin
password: secret
Fitur YAML Lanjutan
YAML mencakup fitur-fitur bertenaga seperti string multi-baris, tipe data, serta anchor yang membuat dokumen lebih efisien dan terstruktur. Di bagian ini, kita akan membahas 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 saat dibutuhkan:
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:
- Daftar (sekuens):
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 pada berkas konfigurasi, membuatnya lebih rapi 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 kunci-nilai dari anchor ke dalam mapping lain. Jika sebuah kunci 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 berkas konfigurasi besar di mana pengulangan nilai secara manual tidak efisien. Fitur ini membantu menjaga berkas YAML tetap DRY (Don't Repeat Yourself) dan memudahkan pembaruan.
Contoh Penggunaan Umum YAML
YAML banyak digunakan dalam pengembangan perangkat lunak, otomatisasi infrastruktur, dan manajemen API. Sintaks yang mudah dibaca menjadikannya format pilihan untuk berkas konfigurasi, serialisasi data, dan Infrastructure as Code (IaC). Mari kita bahas penerapan yang paling umum.
Berkas konfigurasi
YAML banyak digunakan untuk konfigurasi dalam aplikasi seperti Docker Compose, Kubernetes, dan pipeline CI/CD. Kemudahannya untuk dipahami membuat siapa pun dapat mempelajari berkas setelan 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 di Docker dalam kursus Docker tingkat menengah ini.
Serialisasi dan transfer data
YAML digunakan untuk men-serialisasi data bagi API dan alat manajemen konfigurasi dengan mengonversi struktur data yang kompleks menjadi format yang mudah dibaca manusia dan mudah diurai oleh mesin.
Contohnya, isi permintaan API yang diformat dalam YAML:
user:
id: 123
name: "John Doe"
email: "johndoe@example.com"
active: true
Struktur YAML berbasis indentasi menghilangkan sintaks yang tidak perlu, sehingga lebih ringan, mudah dibaca, dan mudah diubah dibandingkan JSON.
Infrastructure as Code (IaC)
Alat manajemen konfigurasi seperti Ansible dan Kubernetes memanfaatkan YAML untuk mendefinisikan status sistem, mengotomatisasi proses, dan memastikan konsistensi di berbagai lingkungan.
- Di Ansible, YAML digunakan untuk menulis playbook yang mendefinisikan status sistem, tugas, dan dependensi, memastikan komponen infrastruktur dikonfigurasi secara konsisten.
- Kubernetes menggunakan manifest YAML untuk mendefinisikan sumber daya seperti pod, layanan, 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 di Kubernetes dalam 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 Berkas YAML
YAML banyak digunakan untuk berkas konfigurasi, otomatisasi, dan serialisasi data, namun karena bergantung pada indentasi, pemformatan yang benar sangat penting. Berikut cara membaca, menulis, memvalidasi, dan mengedit YAML secara efektif.
Membaca dan menulis YAML di Python
Pustaka PyYAML Python dapat mengurai dan menghasilkan YAML.
Bayangkan Anda memiliki berkas konfigurasi YAML berikut:
database:
host: localhost
port: 5432
user: admin
password: secret
Berikut cara Anda dapat bekerja dengan berkas 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 berkas 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 daring: YAML Lint, JSON Formatter’s YAML Validator
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 Perlu Dihindari di YAML
Meski sederhana, Anda tetap mudah menemui masalah dan salah ketik saat bekerja dengan YAML. Bagian ini membahas kesalahan-kesalahan tersebut dan memberikan praktik terbaik untuk menulis berkas yang bersih dan benar. Inilah juga alasan saya merekomendasikan penggunaan 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 sebenarnya keputusan yang disengaja, karena sistem yang berbeda membaca tab secara berbeda, dan untuk meminimalkan dampak, spasi menjadi pilihan yang disarankan.
Indentasi yang salah
Pastikan indentasi konsisten untuk menghindari kesalahan parsing. Karena indentasi adalah satu-satunya metode YAML untuk menunjukkan hierarki, parsing yang tidak tepat dapat menyebabkan masalah pada kode Anda. Anda dapat dengan mudah menaruh pasangan key: value di tempat yang salah, jadi selalu perhatikan indentasi!
Lupa memberi tanda kutip untuk karakter khusus
Gunakan tanda kutip untuk string yang berisi karakter khusus atau spasi. Hal-hal seperti backslash, koma, tanda seru, dan sebagainya memerlukan tanda kutip agar dibaca sebagai string.
path: "/home/user/documents"
message: "Hello, World!"
Dengan menggunakan validasi yang tepat, pengeditan terstruktur, dan PyYAML di Python, Anda dapat bekerja secara efisien dengan berkas YAML sekaligus menghindari jebakan umum.
Kesimpulan
YAML adalah format yang bertenaga namun sederhana yang banyak digunakan dalam konfigurasi, serialisasi data, dan otomatisasi 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 alur kerja CI/CD melalui kursus CI/CD for Machine Learning ini.
- Jelajahi bagaimana API menggunakan YAML dalam spesifikasinya melalui kursus Introduction to APIs in Python ini.
- Pelajari lebih dalam tentang kontainerisasi dan otomatisasi infrastruktur dalam jalur Containerization and Virtualization ini.
FAQs
Apakah YAML bersifat universal?
Selama sumber atau target data dapat membaca YAML, YAML adalah metode yang layak dan bermanfaat untuk men-serialisasi dan mentransportasikan data. Pastikan Anda mengirim data ke target yang dapat memproses YAML.
Apakah YAML aman? Bisakah berkas YAML menimbulkan risiko keamanan?
YAML sendiri hanyalah format data, tetapi risiko keamanan muncul saat mengurai berkas 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.
Bisakah YAML mendukung variabel lingkungan?
Ya! Meskipun YAML sendiri tidak langsung memproses variabel lingkungan, banyak alat (seperti Docker Compose dan Kubernetes) memungkinkan perujukan variabel lingkungan di dalam berkas YAML.
Bagaimana cara menangani komentar di YAML?
YAML mendukung komentar satu baris menggunakan simbol #, tetapi tidak mendukung komentar multi-baris. Jika Anda membutuhkan komentar multi-baris, solusi umum adalah menggunakan kunci dummy seperti _comment. Namun, ini hanyalah 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.

