Selasa, 10 Maret 2020

AWS-big data

Cara Setup Jupyter Notebook di Amazon EC2

Sharing is caring!
Untuk keperluan big data analytics, memang paling enak menggunakan Jupyter Notebook untuk menganalisis data. Jupyter Notebook merupakan aplikasi opensource berbasis web yang bisa digunakan untuk membuat dan berbagi dokumen yang berisi live codeequations, visualisasi, dan teks naratif sehingga cocok buat presentasi dan ngajar kuliah ðŸ˜€ .
Dalam artikel kali ini, saya akan mencoba memaparkan bagaimana cara setup Jupyter Notebook yang terintegrasi dengan Python di Amazon EC2, sebuah cloud service di AWS yang memberikan fitur kemudahan dalam scaling terhadap spesifikasi kebutuhan big data. Melalui artikel sebelumnya tentang cara setup Amazon EC2 sudah saya paparkan panjang lebar, nah sekarang akan dibahas bagaimana memanfaatkan EC2 untuk keperluan komputasinya.
Di dalam AWS, terdapat 2 cara untuk bisa menggunakan Jupyter Notebook yaitu dengan menggunakan service Amazon Sagemaker dan Amazon EC2. Amazon Sagemaker merupakan service yang secara khusus digunakan untuk keperluan komputasi machine learning. Melalui service ini, penggunaan Jupyter Notebook sangat mudah sekali karena hanya dengan melalui create instance, jalankan Jupyter Notebook, dan selesai. That’s it… Tapi… sayangnya gak ada Free Tier nya, dan biaya untuk runtime instance nya pun relatif mahal. Sehingga pernah ada peserta workshop saya yang diberi modal USD 50 untuk menggunakan AWS langsung habis dalam beberapa hari saja ketika dia lupa menghentikan instancenya :D.
Alternatif lain dari Amazon Sagemaker adalah dengan Amazon EC2. Perbedaan keduanya adalah jika Amazon Sagemaker, Jupyter Notebook dapat langsung kita gunakan begitu instance ready, namun di Amazon EC2 untuk bisa menggunakan Jupyter Notebook harus disetup secara manual. Meskipun agak ribet sedikit untuk setup nya, namun kelebihan dari EC2 ini terdapat Free Tier nya, dan biaya sewa yang relatif lebih murah daripada Amazon Sagemaker.
Secara umum, untuk melakukan setup Jupyter Notebook di platform Amazon EC2 terdapat 4 langkah, yaitu:
  1. Setting port di instance EC2
  2. Install Anaconda
  3. Setting Konfigurasi
  4. Jalankan Jupyter Notebook

Langkah 1 – Setting Port Instance EC2

Langkah ini merupakan langkah awal yang diperlukan untuk mensetting port default dari aplikasi Jupyter Notebook. Untuk bisa menjalankan Jupyter Notebook, port default yang digunakan adalah 8888.
Untuk melakukan setting port ini, caranya adalah instance EC2 yang sedang running (di dashboard EC2), klik pada bagian ‘launch-wizard‘ pada kolom Security Groups.
Selanjutnya masuk ke menu tab Inbound, lalu klik Edit.
Selanjutnya tambahkan port 8888 pada tabel yang disediakan. Pastikan pada bagian Source pilih Anywhere supaya kita bisa mengakses Jupyter Notebook dari IP mana saja.

Langkah 2 – Install Anaconda

Untuk memudahkan instalasi Jupyter Notebook, di sini saya sangat merekomendasikan menggunakan paket software Anaconda yang di dalamnya sudah include Jupyter Notebook itu sendiri, Python kernel, serta beberapa library penting yang diperlukan untuk komputasi di Python. Sehingga, dengan Anaconda ini kita tidak perlu install modul secara satu persatu (mirip XAMPP :D).
Perintah untuk mengunduh Anaconda di Ubuntu Server (asumsi EC2 nya menggunakan Ubuntu Server) adalah menggunakan perintah berikut ini.
wget https://repo.anaconda.com/archive/Anaconda3-2019.07-Linux-x86_64.sh
Perintah di atas untuk mengunduh Anaconda versi terakhir for Linux. URL download untuk versi update terbaru Anaconda bisa dilihat di https://www.anaconda.com/distribution/
Setelah berhasil diunduh, langkah berikutnya adalah menginstall nya dengan perintah:
bash Anaconda3-2019.07-Linux-x86_64.sh

Langkah 3 – Setting Konfigurasi

Langkah selanjutnya ketika Anaconda berhasil diinstall adalah melakukan setting konfigurasi. Langkah ini agak panjang dan ribet, tapi sebenarnya mudah kok ðŸ˜€
Konfigurasi pertama yang dilakukan adalah setting path untuk Python kernelnya. Terkadang di beberapa kasus bisa jadi di instance EC2 yang dibuat sudah ada Python bawaannya. Setting konfigurasi ini diperlukan untuk mengarahkan Python kernel yang nantinya akan digunakan Jupyter Notebook untuk running kode program Python adalah Python bawaannya Anaconda yang up to date.
Adapun langkahnya adalah cukup mengedit file .bashrc (bisa menggunakan vim atau pico di Ubuntu).
pico .bashrc
Selanjutnya tambahkan baris perintah berikut ini di bagian paling atas isi file.
export PATH="/home/ubuntu/anaconda3/bin:$PATH" 
Keterangan: path di atas merupakan path di mana python kernel bawaan Anacondanya berada.
Setelah path disetting, langkah berikutnya adalah melakukan switch ke python kernel bawaan Anaconda berdasarkan path tadi dengan memberikan perintah:
source .bashrc 
OK, perlu diketahui bahwa di awal saya sudah sampaikan bahwa Jupyter Notebook ini adalah aplikasi web sehingga aplikasi ini dapat diakses secara publik melalui browser. Tentunya hal ini menjadi riskan. Oleh karena itu perlu dibuat semacam password untuk bisa masuk ke dalam Jupyter Notebooknya. Berikut ini adalah langkah-langkah untuk mengenerate password dan settingnya di Anaconda.
Pertama kita buat password kemudian mengeneratenya menjadi SHA hashed version. Ketikkan perintah berikut ini di shell Ubuntunya.
ipython 
Perintah di atas akan membuat kita masuk ke dalam kernel Pythonnya via IPython.
Selanjutnya di dalam Ipython ketikkan perintah ini:
from IPython.lib import passwd
passwd()
Silakan ketikkan password yang akan diset untuk akses Jupyter Notebooknya. Setelah itu nantinya akan muncul serangkaian SHA hashed (lihat gambar di bawah ini)
Kode SHA hashed itulah nantinya akan kita letakkan ke dalam konfigurasi Jupyter Notebooknya. Silakan dicopas dulu kode hash nya ke notepad ya, dalam contoh di atas adalah string ‘sha1:3677db994906:164f09eddd2ead826b8428e51635acedef971fab’
Next.. kita akan mengenerate file config untuk Jupyter Notebooknya. Silakan ketikkan perintah berikut ini di shell Ubuntu. Oya untuk keluar dari shell Ipython silakan ketik perintah
exit()
Selanjutnya ketikkan perintah di bawah ini untuk mengenerate file config Jupyter Notebook.
jupyter notebook --generate-config
Perintah di atas akan mengenerate file jupyter_notebook_config.py yang ada di folder .jupyter
Langkah berikutnya adalah mengenerate SSL Certificate supaya Jupyter Notebook bisa dibuka di browser. File sertificate nya ini nanti disimpan dalam suatu folder ‘certs‘. Perintahnya:
mkdir certs 
cd certs
sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem
Setelah perintah di atas diketikkan, kita diminta memasukkan beberapa data terkait identitas SSLnya seperi nama negara, nama provinsi dll. Diisi saja dengan data sembarang ðŸ˜€
Perintah yang diketikkan di atas akan menghasilkan sebuah file mycert.pem yang merupakan SSL certificate dengan masa valid 365 hari. Jika suatu saat habis masa validnya, maka bisa digenerate dengan cara yang sama seperti di atas.
Selanjutnya, lakukan chmod 755 pada file certificate tersebut
chmod 755 mycert.pem
Langkah berikutnya adalah mengedit file konfigurasi Jupyter Notebook yang telah kita generate sebelumnya.
pico .jupyter/jupyter_notebook_config.py 
Kemudian tambahkan beberapa baris perintah di bawah ini
c = get_config()
c.IPKernelApp.pylab = 'inline'  

# arahkan ke lokasi file SSL certificate
c.NotebookApp.certfile = u'/home/XXXX/certs/mycert.pem'

c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False  

# isikan string SHA hashed di sini
c.NotebookApp.password =  u'sha1:3677db994906:164f09eddd2ead826b8428e51635acedef971fab'

c.NotebookApp.port = 8888

Langkah 4 – Menjalankan Jupyter Notebook

Langkah terakhir dari setting adalah kita membuat folder di mana kita gunakan untuk menyimpan file-file notebook yang kita buat dengan Jupyter Notebook. Misalkan foldernya kita beri nama ‘notebooks’, sehingga perintah untuk membuat foldernya adalah:
mkdir notebooks
cd notebooks 
Di dalam folder notebooks itulah kita jalankan service Jupyter Notebooknya dengan mengetikkan perintah
jupyter notebook 
Setelah service running, kita bisa mengakses Jupyter Notebook nya melalui URL https://public-dns:8888. Di mana public-dns merupakan Public DNS dari instance EC2 yang kita buat, misalnya
https://ec2-22-96-201-57.compute-1.amazonaws.com:8888
Catatan:
Karena SSL certificate yang kita generate tadi gratisan, terkadang muncul pesan error di browser ‘Your connection is not private‘. Tapi, it’s OK diabaikan saja, diklik saja tombol ‘Advanced‘ di browser lalu klik ‘Proceed to …. ‘
Baik selamat mencoba ya ðŸ˜€

Tidak ada komentar:

Posting Komentar