Learning Serverless : Function as a Service (FaaS)

Ibnu Firdaus
PPL D7 — Fasilkom UI
5 min readMar 22, 2019

Things really get smaller and smaller everyday.

Mr. Stark, I don’t feel so good.

Halo, selamat datang pada seri blog PPL D7 bersama saya. Pada kesempatan kali ini kita akan membahas sebuah topik menarik yang actually sangat populer di luar negeri sana, namun tidak begitu populer disini. Kali ini kita akan mempelajari sebuah pemahaman baru yaitu Serverless a.k.a Function as a Service

Hey, sorry to dissapoint, but serverless actually need and run on a server. :((((

What is this ‘as a Service’ thing really?

Pastinya kalian sudah sering mendengar tentang hal-hal yang ujungnya ada kata ‘X as a Service’, apa sih itu sebenarnya? To put it simply, Provider, yaitu penyedia layanan, menawarkan X sebagai sebuah layanan yang dapat kita gunakan. Banyak hal yang sekarang menjadi service. Seperti server, image, dan lain-lain. Nah, Function as a Service (FaaS) pada dasarnya adalah sebuah layanan hosting dari provider yang dapat kita gunakan untuk me-deploy ‘fungsi’ yang kita buat. FaaS berbeda dengan teman-teman aaS lainnya dimana ada yang menyediakan server, yang bisa gunakan dan otak-atik servernya, ada juga yang menyediakan jasa hosting, dimana server dan OS nya sudah ada dan kita hanya perlu push image program kita. FaaS bekerja lebih high-level lagi dimana kita tidak perlu memikirkan server, OS, maupun image, just push the damn function, as simple as that. Jadi seperti itulah gambaran umum tentang apa itu Function as a Service.

Why FaaS is a thing? Why don’t just use the usual way ?

Pasti pertanyaan tersebut sudah terlontar di pikiran kalian. Well, jawabannya adalah ada kebutuhan dimana kita tidak perlu hal-hal rumit lainnya. Misalnya, kita mempunyai API yang dapat melakukan kalkulasi, lalu kita perlu agar API tersebut dapat diakses, maka kita lakukan deployment terhadap API tersebut. Tapi, pertanyaannya adalah apakah kita perlu membuat sebuah app/program baru, lalu membuat image nya, hanya untuk sebuah fungsi kecil (ini yang dinamakan microservices). Nggak perlu kan? Oleh karena itulah FaaS hadir untuk menjawab pertanyaan tersebut.

Dengan FaaS, kita dapat me-deploy microservices atau fungsi atau API yang diperlukan saja, let the system take the rest. Ini membuat pekerjaan kita menjadi lebih mudah dan efisien, kita tidak perlu lagi membuat running app yang boros hanya untuk beberapa fungsi kecil, just do what is really needed to do.

Deeper into Serverless

Jadi, kenapa namanya serverless?

Serverless merujuk pada tidak ‘terlihat’ nya server pada proses deployment, tentu kita membutuhkan server untuk dapat mengakses API yang dideploy, tapi apakah kita perlu melakukan setup server? Tidak kan. Nah itulah kenapa namanya serverless.

Ada sebuah hal penting yang menjadi karakteristik utama dari Serverless, yaitu Stateless. Karena kita hanya sekedar deploy fungsi kita, berarti kita tidak bisa mengatur hal-hal lain layaknya deployment pada umumnya. Karena sifat serverless yang hanya menjadi tempat menaruh fungsi, berarti dia hanya tahu dan hanya dapat menjalankan fungsi itu saja. Loh kalo gitu gak guna dong? Kalau kita bicara full app seperti pada umumnya, tentu serverless tidak berguna, Tapi jika kita dapat merancang app kita dengan paradigman Stateless juga, maka keadaannya akan berbeda.

Jadi, bagaimana caranya kita memanfaatkan serverless ini? Pada dasarnya serverless digunakan untuk sebuah microservices, sebuah fungsi yang hanya bekerja menerima sebuah input, dan memproses dan bekerja hanya berdasarkan input itu saja, dan memberikan outputnya. Jadi dapat dilihat bahwa serverless atau FaaS memiliki kegunaan yang berbeda juga dengan ‘as a Service’ lainnya. However, kita tetap dapat menggunakan state lho, tapi dengan cara menjadikan state itu sebagai rangkaian data dalam input dan juga output. Jadi, pada penerapannya, microservice itu saling lempar state satu sama lain. Weird right? Well if it’s stupid but it works then it’s not stupid.

The Drawback of Serverless

Karena karakteristiknya tersebut, kita dapat melihat bahwa kita tidak memiliki ruang bebas dalam penggunaan serverless ini, kita hanya bisa bekerja pada lingkup microservices nya saja, namun tidak pada aspek lower-level. Tapi hal tersebut sangatlah wajar, semua teknologi pada dasarnya memiliki plus dan minusnya sendiri. Tidak ada yang namanya sebuah tools yang sempurna, capable dalam melakukan segala hal yang kita inginkan. Tinggal kita saja yang bijak dalam menentukan paradigma apa, konsep apa, tools apa yang akan kita gunakan dalam development.

Jadi, itulah konten blog kali ini, It was not very technical i know, Blog ini hanya berfungsi sebagai semacam introdcution pada konsep Serverless. Jika kalian tertarik, kalian bisa membaca postingan blog rekan satu tim saya yang membahas aspek technical dari serverless disini.

Simple Implementation

Jadi pada kesempatan ini kita akan mencoba membuat sebuah API serverless di AWS. Tapi, pada blog ini akan lebih membahas mengenai perbedaannya dengan API biasa. Kalian bisa melihat step-by-step deployment API serverless di blog teman saya fadhlan disini.

API dapat diakses disini.

Bagian terpenting dari API serverless hanyalah terdiri dari dua berkas saja, yaitu berkas yang berisi fungsinya (pada kasus ini yaitu app.js), dan berkas serverless.yml yang berisi konfigurasi API nya. Tentu saja diperlukan komponen berkas lainnya seperti node_modules dan lain-lain, tetapi secara mendasar kita hanya membutuhkan dua berkas ini saja.

Hanya butuh 2 berkas untuk membuat serverless API

Untuk konfigurasi server, tampilannya kurang lebih seperti ini.

Tampilan berkas konfigurasi serverless.yml

Bagian yang harus kita lihat adalah sebagai berikut :

  • Bagian provider berisi tentang informasi mengenai penyedia endpoint dari API yang dibuat
  • Bagian functions berisi mengenai bagaimana endpoint kita akan berjalan

Lalu, bagaimana seharusnya kita membuat fungsi di sebuah serverless API?

Pada dasarnya, tidak ada perbedaan apapun pada bagaimana kita membuat fungsi, hanya saja, kita perlu menggunakan modul serverless sehingga fungsi kita menjadi callable oleh sebuah API endpoint.

Kita membutuhkan modul serverless-http

Selain itu, kita perlu ekspor variabel app kita agar bisa dipanggil oleh serverless endpoint di provider.

Kita perlu export variabel ‘server’

Jadi, cukup sekian untuk kesempatan kali, sampai jumpa !!

See you next time!

--

--