Configuration Manager #
Sebelum era container dan Kubernetes mendominasi, Configuration Management (CM) sudah menjadi fondasi utama operasional sistem skala besar.
Tool seperti Ansible, Puppet, Chef, dan SaltStack lahir untuk menjawab satu masalah klasik:
Bagaimana memastikan ratusan atau ribuan server memiliki konfigurasi yang konsisten, aman, dan dapat direproduksi?
Artikel ini membahas Infrastructure Configuration Management, yaitu CM di level server / OS, dengan Ansible sebagai contoh utama.
Apa itu Infrastructure Configuration Management? #
Infrastructure Configuration Management adalah praktik untuk:
- Mendefinisikan desired state dari server
- Menerapkan konfigurasi secara otomatis
- Menjaga konsistensi konfigurasi sepanjang waktu
- Mencegah configuration drift
Contoh desired state:
- Nginx ter-install
- Port 80 terbuka
- User
deployada - Service
nginxselalu running
Fokusnya bukan script dijalankan, tetapi state tercapai.
Masalah yang Diselesaikan oleh CM #
Tanpa CM, biasanya terjadi:
- Setup server manual via SSH
- Dokumentasi setup tidak sinkron dengan realita
- Server satu berbeda dengan lainnya
- Sulit audit & rollback
- Human error tinggi
CM mengubah ini menjadi:
- Declarative (apa yang diinginkan, bukan bagaimana caranya)
- Repeatable (bisa dijalankan berkali-kali)
- Auditable (config = code)
Ansible sebagai Configuration Manager #
Apa itu Ansible? #
Ansible adalah:
- Agentless configuration management tool
- Menggunakan SSH
- Berbasis YAML (playbook)
- Bersifat declarative & idempotent
Tidak perlu install agent di server target.
Konsep Dasar Ansible #
1. Inventory #
Daftar host yang dikelola:
[web]
web-01
web-02
2. Playbook #
Blueprint konfigurasi:
- hosts: web
tasks:
- name: Install nginx
apt:
name: nginx
state: present
3. Task #
Unit terkecil dari konfigurasi.
4. Module #
Fungsi bawaan (apt, service, file, user, dll).
5. Role #
Struktur modular untuk konfigurasi besar:
roles/
└─ nginx/
├─ tasks/
├─ templates/
└─ handlers/
Prinsip Penting CM: Idempotency #
Idempotent berarti:
Playbook dijalankan 1x atau 100x → hasilnya tetap sama
Contoh:
- Jika nginx sudah terinstall → tidak diinstall ulang
- Jika service sudah running → tidak di-restart
Ini adalah jiwa dari Configuration Management.
CM vs Script Bash #
| Aspek | Bash Script | Ansible CM |
|---|---|---|
| Declarative | ❌ | ✅ |
| Idempotent | ❌ | ✅ |
| Error handling | Lemah | Kuat |
| Readability | Rendah | Tinggi |
| Audit | Sulit | Mudah |
Use Case Nyata Ansible #
Provisioning Server #
- Install OS package
- Setup timezone
- Setup user & SSH key
Web Server Configuration #
- Nginx / Apache
- TLS certificate
- Log rotation
Database Server #
- Install PostgreSQL / MySQL
- Set config file
- Open firewall
Hardening & Security Baseline #
- Disable root login
- Setup fail2ban
- Audit permission
Best Practices Infrastructure CM #
1. Declarative, Bukan Imperative #
❌ Salah:
shell: apt install nginx
✅ Benar:
apt:
name: nginx
state: present
2. Gunakan Role, Bukan Playbook Monolitik #
- Lebih reusable
- Lebih terstruktur
- Mudah di-maintain
3. Jangan Simpan Secret di Playbook #
❌ Salah:
password: admin123
✅ Benar:
- Ansible Vault
- External secret manager
4. Version Control Semua Konfigurasi #
- Git sebagai source of truth
- Setiap perubahan via PR
- Review & approval
5. Hindari Configuration Drift #
- Jalankan CM secara berkala
- Jangan manual edit server
Jika tidak di Ansible, maka tidak eksis.
6. Test Configuration #
Gunakan:
- Molecule
- Dry-run (
--check)
7. Pisahkan Environment #
dev/
staging/
prod/
Dengan variable berbeda.
Anti-Pattern CM #
🚫 Menggunakan Ansible seperti shell script
🚫 Edit server manual setelah CM jalan
🚫 Playbook terlalu kompleks
🚫 Tidak ada dokumentasi role
🚫 Secret hardcoded
CM dalam Arsitektur Modern #
Terraform → Provision VM
Ansible → Configure OS & Service
Docker → Package App
K8s → Runtime Orchestration
CM tetap relevan, bahkan di era Kubernetes.
Kapan Ansible CM Wajib Digunakan? #
- Server > 2
- Ada compliance
- Ada tim ops / SRE
- Setup server kompleks
- Perlu audit & consistency
Kesimpulan #
Infrastructure Configuration Management adalah pondasi stabilitas sistem.
Ansible membantu memastikan:
- Server konsisten
- Setup dapat direproduksi
- Human error ditekan
Infrastructure yang baik bukan yang canggih, tapi yang bisa diulang dengan hasil yang sama.