Serverless: We Don’t Need Server?

Fadhlan Hazmi
PPL D7 — Fasilkom UI
4 min readMar 16, 2019

Halo, pada blog kali ini, kita akan membahas salah satu arsitektur yang menurut saya cukup menarik dan unik, yaitu serverless architecture. Sebelum kita menyelam lebih jauh, mari kita coba pahami masalah apa yang coba diselesaikan oleh serverless architecture.

Coba bayangkan anda baru saja sampai rumah dan ada bendera kuning, eh maksud saya ada suatu masalah pada aplikasi yang sedang anda kembangkan. Aplikasi anda membutuhkan suatu service yang hanya menjalankan sebuah fungsi sederhana, misalnya memanggil sebuah API dan melakukan parsing data yang didapat dan mengembalikan nilainya. Namun, terlalu mahal jika anda menyewa sebuah server hanya untuk menjalankan fungsi tersebut, terlebih jika anda ingin fungsi tersebut berjalan pada server yang tidak pernah sleep(soalnya yang sleep biasanya murah atau gratis).

Disinilah peran serverless yang menyediakan sebuah function-as-a-service (faas) yang harganya lebih murah untuk kasus seperti diatas (karena membayar hanya tiap fungsi dipanggil) dan fungsi tersebut tidak pernah sleep. Jadi, sebenarnya serverless architecture juga membutuhkan server.

I’m sorry guys, it still needs a server.

What is Serverless?

Dapat dilihat dari namanya bahwa arsitektur ini serverless bukan server-less. Arti serverless disini adalah orang yang ingin membuat aplikasi serverless tidak perlu membeli, menyewa, atau mengawasi server tempat aplikasi serverless tersebut berjalan. Aplikasi serverless berjalan tanpa menyimpan state (stateless) dan berjalan hanya jika dipanggil atau di atur untuk berjalan jika ada suatu kejadian tertentu (event-triggered).

Salah satu service yang populer menyediakan serverless architecture adalah Amazon dengan AWS Lambda.

One of the use case for AWS Lambda.

Why Serverless?

Jika anda membuat aplikasi yang arsitekturnya membutuhkan beberapa fungsi yang perlu di hosting dan fungsi tersebut tidak terlalu kompleks, anda merupakan orang yang tepat untuk menggunakan serverless architecture. Mengapa? Saya akan menjawab dengan memberikan beberapa keuntungan memakai serverless architecture.

  • Pricing, lebih murah dibanding menggunakan server biasa dengan performa yang sebanding seperti response time.
  • No Server Management, tidak perlu memikirkan mengenai server dalam bentuk apapun.
  • Focus on Procuct, dapat lebih fokus kepada produk karena tidak perlu memikirkan mengenai server.
  • Auto-Scale, meningkatan skala aplikasi yang dibuat kapanpun kita mau.

What to Consider?

Di dunia ini tidaklah ada yang sempurna, sama halnya dengan serverless architecture, ada yang perlu anda pertimbangkan saat menggunakan arsitektur ini. Berikut adalah beberapa hal yang layak untuk dipertimbangkan sebelum menggunakan serverless architecture.

  • 3rd Party Dependencies, Aplikasi yang berjalan secara serverless pasti bergantung pada pihak ketiga yang menyediakan servisnya, hal ini cukup riskan, karena aplikasi anda di maintain oleh pihak ketiga.
  • Short Timeout, terdapat batasan 300 ms sebelum terjadi timeout. Fungsi yang kompleks dapat tersandung dengan batasan ini.
  • Lack of operational tools, saat ingin melakukan debugging dan monitoring, developer harus bergantung pada tools yang disediakan oleh pihak ketiga.

Implementation

Saya mencoba melakukan implementasi serverless architecture ini pada aws lambda yang merupakan cloud service perusahaan Amazon. Stack yang digunakan untuk implementasi ini adalah NodeJS. Oke langsung saja kita lihat bagaimana tahap-tahap membuatnya.

How to implement

Pertama kali yang dilakukan anda harus mendaftar pada aws, yaitu pada aws.amazon.com. Setelah selesai membuat akun, klik pada nama akun lalu klik pada menu “My Security Credentials”.

Pilih menu “My Security Credentials”

Setelah itu, akan muncul halaman IAM Management Console lalu pilih menu “Access keys” dan klik tombol “create new access key”. Simpan key dan secret anda untuk digunakan saat membuat aplikasi serverless.

Terdapat dua cara untuk melakukan deploy aplikasi serverless pada aws lambda, yaitu melalui web console atau melalui CLI menggunakan module serverless yang dimiliki oleh NPM. Cara yang akan digunakan kali ini adalah menggunakan CLI. Hal pertama yang dilakukan adalah instalasi modul serverless menggunakan NPM.

npm install -g serverless
sudo npm install -g serverless // untuk pengguna linux

Lalu masukkan key dan secret yang sudah disimpan sebelumnya ke config menggunakan perintah berikut.

serverless config --provider aws --key <KEY-ANDA> --secret <SECRET-ANDA>

Selanjutnya adalah coding time! Sebelum itu kita bisa melakukan generate template aplikasi serverless sesuai dengan provider dan stack yang digunakan. Untuk kasus ini gunakan perintah berikut.

serverless create --template aws-nodejs

Kode template secara otomatis akan dibuat pada direktori tempat anda berada. Selain kode, terdapat file serverless.yml yang berisi informasi mengenai aplikasi anda. Template ini sudah siap deploy dan untuk mendeploy aplikasi gunakan perintah berikut.

serverless deploy

Yeay selesai! Anda sudah berhasil membuat dan melakukan deploy aplikasi serverless!

Namun, aplikasi ini sesuai masih template. Saya mencoba membuat sebuah aplikasi yang berkaitan dengan proyek PPL kelompok saya yaitu, akan mendapatkan nama-nama item yang kemungkinan akan dibeli pada hari itu. Berikut kode implementasi yang sudah saya buat.

app.get('/', async (req, res, next) => {const query = '<QUERY TO PREDICTION DATABASE>';const date = new Date().getDate();const response = await pool.query(query, [date]);const variantids = response.rows.map(elem => elem.variant_id);const queryResult = await callAPI(variantids,5);res.status(200).send(queryResult.map(elem => elem.name));});module.exports.server = sls(app);

Seperti itulah kurang lebih implementasi aplikasi serverless saya, terdapat beberapa potongan kode yang tidak ditampilkan karena terdapat informasi yang sensitif. Aplikasi yang sudah saya buat dapat di akses pada link berikut:

https://ffrf3k6vg4.execute-api.us-east-2.amazonaws.com/dev/

Kesimpulannya adalah gunakan serverless architecture jika anda membutuhkan fungsi yang harus di hosting, namun fungsi tersebut cukup sederhana implementasinya. Namun, jangan gunakan serverless architecture jika anda tidak ingin bergantung kepada pihak ketiga atau fungsi yang ingin anda hosting merupakan fungsi yang kompleks.

Sekian tulisan dari saya mengenai serverless architecture. Semoga dapat bermanfaat bagi anda yang membaca. Sampai ketemu di tulisan saya yang selanjutnya!

--

--