Jika dalam keseharian pekerjaan kita berhubungan dengan infrastruktur sistem/jaringan/aplikasi, mungkin kita tidak asing dalam konfigurasi server. Namun, mungkin sering juga kita jumpai pekerjaan yang sifatnya berulang atau repetisi. Kemudian hal ini kita lakukan secara masif ke banyak perangkat.
Mungkin jika hanya 1 atau 2 perangkat, hal ini tidak akan terlalu menghambat pekerjaan. Namun, bagaimana jika hal ini perlu kita lakukan ke banyak perangkat. Misalkan harus menyiapkan infrastrukur atau konfigurasi server yang jumlahnya sudah puluhan bahkan ratusan dan sifatnya berulang.
Pada artikel kali ini, saya akan mencoba membagikan solusi dari kendala tersebut. Dengan banyaknya tools atau alat IT automation atau Configuration Management atau Infrastucture Provisioning saat ini, kita cukup terbantu jika menggunakan bantuan dari tools tersebut.
Di artikel ini, saya akan mencoba membagikan dasar dasar Configuration Management menggunakan Ansible. Sekilas tentang Ansible, dikutip dari Dokumentasi Ansible. Ansible merupakan IT automation tool yang berfungsi untuk konfigurasi sistem, deploy software atupun untuk orkestrasi pekerjaan pekerjaan sistem lainnya. Ansible juga mendukung banyak pilihan Ansible Module yang berisi bermacam macam koleksi modul untuk konfigurasi bermacam macam perangkat sistem/server/jaringan.
Konfigurasi di artikel ini meliputi:
- Instalasi awal Ansible
- Konfigurasi dasar Ansible
- Melakukan pekerjaan/task sederhana menggunakan metode ad-hoc
Topologi yang digunakan adalah terdapat total 3 buah nodes server. node1 akan bertindak sebagai control plane dimana Ansible terinstall di node ini. Kemudian akan ada node2 dan node3 yang bertindak sebagai child node dimana nantinya konfigurasi akan diteruskan atau di-push ke node node tesebut.
Skenarionya adalah dari control plane node akan melakukan instalasi aplikasi, namun semua diatur atau dikontrol langsung dari control plane node dan secara paralel konfigurasi akan berjalan ke semua node
Lingkungan sistem yang saya gunakan adalah 3 node AWS EC2 Instance yang berjalan menggunakan sistem operasi Ubuntu 20.04. Metode instalasi Ansible menggunakan metode instalasi via pip (Python package manager). Versi Python yang digunakan adalah versi 3.8.5
Berikut langkah-langkah konfigurasinya:
-
Saya akan mulai dengan membuat virtual environment
virtualenv demo-ansible
-
Kemudian saya aktivasi virtual environment dan melakukan instalasi ansible via pip package manager
cd demo-ansible source bin/activate cd lib/python3.8/site-packages pip3 install ansible
-
Selanjutnya verifikasi bahwa ansible sudah berhasil terinstall
ansible --version
-
Sesuai dokumentasi Ansible, secara default Ansible menggunakan SSH untuk berinteraksi atau sebagai media transportnya. Pastikan SSH ke node node yang bertindak sebagai child node berhasil. Karena di artikel ini saya menggunakan media AWS EC2 Instance sebagai node, pastikan saat SSH ke nodes sudah menginformasikan key-pair yang digunakan
-
Selanjutnya adalah membuat folder yang berisi konfigurasi-konfigurasi Ansible. Kemudian membuat file yang berisi informasi atau inventory dari nodes/hosts
mkdir demo-ansible cd demo-ansible/ touch hosts
-
Konfigurasi file hosts yang sudah dibuat. Pada contoh ini saya masukkan node-node yang akan dikonfigurasi dan menginformasikan control node sebagai local
# hosts [nodes] node2 ansible_host=172.16.0.223 node3 ansible_host=172.16.0.216 [local] control ansible_connection=local
-
Selanjutnya adalah membuat Ansible config file
touch ansible.cfg
-
Pada ansible.cfg, saya berikan informasi konfigurasi dasar terkait default inventory file, default remote_user, default private_key dan tidak melakukan pengecekan host_key
#ansible.cfg [defaults] inventory = ./hosts remote_user = ubuntu private_key_file = ~/keypair.pem host_key_checking = False
-
Selanjutnya kita dapat memastikan apakah konfigurasi dasar sudah berjalan. Mulailah dengan melihat daftar hosts. Pastikan hasilnya sudah mencatumkan seluruh hosts yang dikonfigurasi di inventory file
ansible --list-hosts all
-
Selanjutnya kita dapat mulai melakukan task atau pekerjaan yang diinginkan. Command-command pada task mengacu atau refer ke dokumentasi module Ansible di atas Ansible Module. Saya akan coba mulai dengan module ping ke seluruh hosts.
ansible -m ping all
Selain itu kita juga bisa mereferensikan host-host tertentu pada command
ansible -m ping nodes
-
Selanjutnya saya akan mencoba menjalankan command dari module shell, untuk mendapatkan informasi terkait uptime tiap hosts dan informasi hostname tiap hosts.
ansible -m shell -a "uptime" all ansible -m shell -a "hostnamectl" all
-
Contoh selanjutnya adalah saya akan coba install nginx pada tiap host namun hanya hosts pada kategori nodes (node2 dan node3). Di Ansible, jika memerlukan sudo access kita dapat mereferensikan command –become
ansible -m shell -a "apt update" --become nodes
ansible -m shell -a "yes | apt install nginx-full" --become nodes
-
Selanjutnya pastikan nginx sudah berhasil terinstall di node2 dan node3 tanpa kita harus instalasi manual ke kedua node tersebut
nginx -v
Dari contoh di atas, kita sudah dapat mensimulasikan dasar dasar configuration management menggunakan Ansible. Namun masih terjadi sedikit hambatan, task task di atas masih dilakukan secara baris per baris karena menggunakan metode ad-hoc. Bagimana jika kita memiliki kumpulan baris baris command namun kita ingin hanya dengan menjalankan 1 kali instruksi, semua task tersebut dapat berjalan. Hal itu dapat dimungkinkan dengan bantuan Ansible Playbook.
Contoh penggunaan atau konfigurasi menggunakan Ansible Playbook, Insya Allah akan saya coba simulasikan di blog berikutnya atau Bagian 2.
Demikian contoh konfigurasi Configuration Management dasar menggunakan Ansible pada artikel ini.
Semoga bermanfaat.