Belajar Ansible
Baru denger istilah DevOps? Ansible? atau bahkan Otomatisasi deployment aplikasi itu sendiri?
Okeh, sampai disini. Kita sama :smile: Berarti kita punya garis start yang sama.
Dikantor, kebetulan sedang ada issue tentang DevOps, lebih spesifik lagi tools/teknologi yang dipake adalah Ansible, jadinya saya penasaran dengan teknologi ini. Jadi saya fikir, daripada saya belajar sendiri mending saya sekalian share, paling tidak ini jadi catatan saya ketika saya lupa.
Kenapa harus diotomatisasi? Manual juga masih bisa kan? Toh cuma mindahin source code doang to?
Mmmm… Coba baca kebawah dulu deh :worried:
Proses Deployment Aplikasi
Proses deployment aplikasi disetiap perusahaan IT memang biasanya berbeda-beda, tergantung kebijakan dan infrastruktur yang dipilih. Namun demikian, ide dari proses deployment tersebut ‘cenderung’ sama yaitu dimulai dari pemindahan source code aplikasi dari tempat development ke server live, lalu kemudian melakukan beberapa pengaturan yang diperlukan. Nampaknya sederhana, tapi jika setiap 2 minggu atau 3 minggu atau berapapapun lamanya jarak release tersebut, tetap saja harus melakukan proses yang ‘cenderung’ berulang dan sama (dari proses sebelumnya), apa itu efektif? Menghabiskan banyak waktu dan tenaga untuk proses yang sama, dalam istilah programmer tua itu disebut DRY (Do not Repeat Yourself). Oya, belum lagi nanti kalau misal situkang mindahin source code tersebut lupa mengkonfigurasi file anu, file ini, file itu, apa tidak malah jadi merepotkan? Belum lagi kalau servernya banyak gimana?
Sebentar, lalu apa itu DevOps (lebih tepatnya “siapa”)?
Ok, pertanyaan ini sama juga pernah muncul dikepala saya, dari DevOps sendiri kata ini terdiri dari dua suku kata yaitu Dev dan Ops itu sendiri. Dev untuk Development (gak tahu deh, development atau developer :smile:) dan Ops sendiri untuk Operations. Jadi ini gabungan dari pekerjaan Development dan Operations dimana development cenderung ke pembuatan, pengembangan dan support aplikasi itu sendiri sedangkan Operations itu sendiri cenderung ke pekerjaan server administration, packaging, dll.
Sumber gambar: Wikipedia - DevOps
Jika diposisikan, DevOps itu berada di-irisan antara development (software enginereeng), Quality Assurance (QA) dan Technology Operations.
Untuk lebih jelasnya tentang tanggung jawab dari pekerjaan ini bisa merujuk ke halaman DevOps.
Sudah liat, banyak yah tanggung jawabnya. Nah justru karena itu, terkadang proses deployment jadi kelihatan ribet padahal jika di dilihat secara secara sederhana itu hanya usaha untuk memindahkan source code aplikasi dari development atau test environment ke live environment.
Ok, sekarang saya (maksud saya pembaca) mulai faham. Lalu selanjutnya apa?
Apa Itu Ansible?
Saya sudah menjabarkan masalah diatas, jadi simple-nya ya Ansible itu membantu (atau bahkan mengganti) peran situkang upload source code tadi itu.
Sudah, itu saja, kebanyakan teori malah jadi bosan nanti.
Cara Kerja Ansible
Mmm… Sederhana saja, saya sudah mau ke praktek ya.
Pernah pake SSH? Kalo belum tahu silahkan baca-baca dulu deh apa itu SSH!
Ansible make SSH. Untuk proses yang lebih kompleks lagi Ansible pake library Python, tapi ya ujung-ujungnya, pake SSH itu tadi :smile:.
Praktek
Sudah install Ansible?
Sebenarnya saya lupa untuk membuat postingan tentang cara instalasi Ansible sendiri :smile:. Untuk sementara silahkan merujuk ke halaman dokumentasinya disini.
File configurasi (default) Ansible.
Letak file-file configurasi Ansible sebenarnya berbeda-beda, tergantung environment yang digunakan biasanya. Tapi, karena saya pake [Ubuntu], jadi saya hanya akan menuliskan yang saya tahu saja :cry:.
Lokasi konfigurasi Ansible sendiri ada di:
/etc/ansible
~/.ansible
Atau bisa langsung di dalam folder project Ansible itu sendiri. Sekarang kita akan mengintip ada apa saja difolder utama konfigurasi Ansible itu sendiri.
Kita coba ketikan perintah ls -l /etc/ansible/
(untuk linux) dan hasil dari
eksekusi perintah tersebut seperti ini:
ansible.cfg
hosts
File ansible.cfg
File ini berisi konfigurasi utama ansible dimana secara default, jika kita tidak menggunakan file konfigurasi kita sendiri atau tidak mendeklarasikannya secara langsung di command-line. Urutan dari file konfigurasi yang akan digunakan oleh ansible adalah
- command line, perintah konfigurasi yang dituliskan langsung di terminal pada saat menjalankan ansible.
- File konfigurasi yang diletakan pada project ansible itu sendiri. Atau dimana direktori sekarang aktif.
- File konfigurasi yang diletakkan di directori home user, di linux biasanya
terletak di
~/.ansible
. - Terakhir, berada di direktori utama ansible itu sendiri. Di linux sendiri,
biasanya di
/etc/ansible/
.
File hosts
File ini berisi konfigurasi server yang akan kita lakukan konfigurasi. Secara default, file ini tidak berisi apa-apa, kecuali contoh saja.
Perintah sederhana, Ad-Hoc command
Sebelum kita bisa melakukan perintah sederhana ini, kita harus punya server yang akan kita konfigurasi dulu, untuk demo atau praktek biasanya saya menggunakan VirtualBox dan sejenisnya. Dan pastikan sudah bisa dan sukses login melalui SSH. Ini karena ansible menggunakan SSH, ingat tadi diatas!
Disini, saya menggunakan VirtualBox dan IP-nya saya setting static menjadi
192.168.56.10
. Jadi saya akan mencoba mengkonfigurasi server virtual
tersebut.
Ketikan perintah berikut di Terminal (ganti [username]
dengan username
masing-masing yang digunakan untuk mengakses komputer server):
ansible all -u [username] --ask-pass -m ping
Perintah diatas akan melakukan ping (-m ping
) ke semua (all
) hosts yang
kita daftarkan di file hosts
tadi, dalam kasus ini hanya satu server. Dan
ingat, perintah diatas dieksekusi melalui SSH dengan user (-u [username]
)
tertentu. Dan satu lagi, --ask-pass
saya gunakan untuk memerintahkan pada
ansible agar menanyakan password SSH kita ketimbang login melalui
SSH key. Kedepannya saya asumsikan kita tidak perlu lagi memasukkan password
untuk SSH karena kita telah melakukan setting RSA key, jika belum, silahkan
lakukan. Tutorialnya banyak kok di mbah.
Dan jika suskes terkoneksi ke server, responsenya harusnya seperti ini:
192.168.56.10 | success >> {
"changed": false,
"ping": "pong"
}
Tunggu dulu, perintah untuk ngeping aja kok panjang banget? Bukannya di subjudul ditulis “perintah sederhana”?
Ya, tentu, karena kita belum melakukan konfigurasi apapun. Itu kenapa di subjudulnya saya masukkan kata Ad-Hoc.