Kelola Kode Serverless dengan Serverless Framework

Framework merupakan alat yang wajib digunakan saat membangun aplikasi dalam skala besar, begitu juga ketika kamu memanfaatkan teknologi serverless. Dalam artikel ini, kita akan mencari tahu cara mengelola kode serverless-mu agar lebih mudah dikelola, diuji, dikembangkan, hingga di-deploy sesuai dengan praktik terbaik yang ada saat ini.

Pengantar Serverless Framework

Teknologi serverless saat ini mendapatkan popularitas yang baik dan mungkin ke depannya menjadi salah satu solusi yang cukup menjanjikan dalam dunia infrastruktur aplikasi. Namun, sebelum mempelajari serverless, kamu perlu menjawab pertanyaan ini: “Mengapa harus belajar serverless? Mengapa kita peduli dengan teknologi ini?”

Untuk menjawab pertanyaan tersebut, saya akan menunjukkan sedikit fakta yang berasal dari Google Trends tentang popularitas serverless dari tahun ke tahun.

💻 Mulai Belajar Pemrograman

Belajar pemrograman di Dicoding Academy dan mulai perjalanan Anda sebagai developer profesional.

Daftar Sekarang

Popularitas Serverless Framework

Pada grafik di atas, kamu bisa melihat bahwa serverless meroket sejak akhir tahun 2015. Apa yang terjadi pada rentang waktu tersebut, ya? Ternyata, pada 13 November 2014, AWS baru saja merilis produk bernama AWS Lambda. Ini merupakan salah satu tonggak penting dalam istilah serverless sebelum akhirnya menjadi populer. Setelah AWS, banyak penyedia layanan cloud lainnya merilis teknologi serupa, dan serverless menjadi semakin populer.

Lantas, apa sebenarnya serverless itu? Sebenarnya, istilah serverless hanyalah sebuah kata yang sedang populer. Dia bukan pola, bukan pula teknologi atau arsitektur. Dia hanya mewakili beragam solusi dalam membangun infrastruktur aplikasi di cloud. Ada beberapa karakteristik agar sebuah layanan dapat disebut serverless dari perspektif pengguna.

  1. Server bukan lagi menjadi fokus. Ini berarti seluruh urusan server tidak lagi dikelola oleh pengguna, tetapi oleh penyedia layanan. Bahkan, pengguna tidak memiliki akses atau kendali terhadap infrastruktur di baliknya.
  2. Scaling bukan lagi menjadi fokus. Layanan serverless harus dapat menyesuaikan kapasitas di belakang layar tanpa kontrol dari pengguna. Penyedia layanan harus dapat meningkatkan atau menurunkan kapasitas sesuai dengan beban kerja yang masuk.
  3. Bayar hanya ketika digunakan. Artinya, pengguna tidak perlu membayar jika tidak ada beban kerja yang masuk. Pengguna tidak perlu membayar ketika sedang tidak digunakan (idle).
  4. Tidak ada administrasi. Pengguna sama sekali tidak perlu memikirkan hal lain kecuali kode aplikasi. Dengan begitu, pengguna dapat lebih fokus pada perkembangan bisnisnya.

 

Evolusi dari Infrastruktur Cloud

Banyak orang yang menganggap serverless sebagai evolusi baru dalam cloud computing, dan saya juga setuju dengan pandangan tersebut. Untuk memahami hal ini, mari kita lihat sejarah perkembangan infrastruktur di cloud.

  • On-premise
    Ini belum dapat dikategorikan sebagai teknologi cloud computing karena pengguna bertanggung jawab atas seluruh aspek dalam membangun infrastruktur aplikasi, seperti perangkat keras, keamanan, pemeliharaan, pembaruan perangkat lunak, jaringan, dan virtualisasi. On-premise merupakan satu-satunya solusi yang tersedia sebelum adanya cloud computing.
  • Infrastructure as a Service (2006)
    Pada tahun 2006, Amazon dan penyedia layanan cloud lainnya meluncurkan layanan Infrastructure as a Service. Dengan layanan ini, sebagian besar aspek infrastruktur aplikasi dapat ditangani oleh penyedia layanan cloud. Kita tidak perlu lagi khawatir tentang perangkat keras, keamanan, virtualisasi, dan jaringan, tetapi kita masih harus memikirkan instalasi perangkat lunak, manajemen sistem operasi, skalabilitas, dan sebagainya.
  • Container as a Service (2013)
    Layanan cloud computing terus berkembang. Sekitar tahun 2013, muncul layanan Container as a Service yang membawa penyederhanaan baru dalam pengelolaan infrastruktur di cloud. Dengan memanfaatkan kontainer, kita dapat mengemas semua kebutuhan aplikasi dan menjalankannya di dalam lingkungan pengelolaan container, seperti Kubernetes. Namun, ini tidak berarti bahwa kita sepenuhnya terbebas dari tanggung jawab infrastruktur. Sebagai gantinya, kita perlu mengelola images dan Docker container.

Manfaat dari Serverless

Serverless membawa banyak manfaat bagi pengguna, berikut di antaranya.

  1. Lower Entry Barrier
    Daripada mengelola infrastruktur, kita hanya perlu men-deploy kode dan sisanya bisa kita serahkan kepada penyedia layanan.
  2. Hemat Biaya
    Serverless dapat menghemat biaya, terutama bagi perusahaan baru. Kita hanya perlu membayar ketika layanan digunakan, bukan saat aplikasi dalam keadaan idle.
  3. High-availability dan Scalability
    Layanan serverless telah dilengkapi dengan high-availability dan scalability secara default. Kita tidak perlu repot menyiapkan strategi untuk meningkatkan atau mengurangi kapasitas server ketika beban kerja sedang tinggi atau rendah.

 

Layanan Serverless di AWS

Layanan serverless tidak hanya terbatas pada komputasi. Di AWS, saat ini terdapat banyak layanan serverless yang dapat digunakan sebagai solusi untuk berbagai masalah, mulai dari komputasi, penyimpanan data, hingga integrasi aplikasi.

Compute Services

Untuk masalah komputasi, AWS menyediakan solusi melalui AWS Lambda. AWS Lambda sering disebut sebagai Function as A Service karena kita dapat men-deploy fungsi yang akan dijalankan ketika ada event tertentu, seperti HTTP Request, perubahan data pada database, atau sinyal yang dihasilkan dari layanan push notification.

Selain Lambda, AWS juga menawarkan solusi melalui layanan AWS Fargate. Layanan ini merupakan compute engine serverless yang kompatibel dengan Amazon Elastic Container Service (ECS) dan Amazon Elastic Kubernetes Service (EKS). Dengan layanan ini, kita dapat menjalankan aplikasi dengan model container, tetapi hanya membayar saat layanan digunakan.

Data Store

Untuk masalah penyimpanan data, AWS menyediakan berbagai solusi serverless yang dapat disesuaikan dengan kebutuhan. Sementara, untuk penyimpanan objek, kita dapat menggunakan Amazon S3; untuk sistem file, kita dapat menggunakan Amazon EFS; atau untuk basis data, kita dapat menggunakan DynamoDB. Layanan-layanan tersebut bersifat serverless sehingga kita tidak perlu khawatir tentang infrastruktur penyimpanan data.

Application Integration

Selain komputasi dan penyimpanan data, AWS juga menyediakan berbagai layanan serverless lainnya yang dapat diintegrasikan dalam membangun aplikasi secara keseluruhan. Misalnya, jika kita memerlukan layanan yang dapat menerima HTTP Request, kita dapat memanfaatkan Amazon API Gateway tanpa perlu repot membangun HTTP Server dari awal. Contoh lainnya, jika kita memerlukan teknologi message broker, kita dapat menggunakan layanan Amazon SQS.

Kita dapat mengeksplorasi lebih lanjut mengenai layanan serverless di AWS melalui tautan berikut: aws.amazon.com/serverless.

 

Penggunaan Serverless untuk Aplikasi Web

Semua layanan serverless di AWS mampu diintegrasikan satu sama lain hingga membentuk satu infrastruktur aplikasi yang utuh. Contohnya, dengan layanan serverless yang ada, kita bisa membuat Full-Stack Web Application seperti bagan yang ada di bawah ini.

Bagan di atas menggambarkan infrastruktur dari aplikasi to-do list sederhana. Seluruh infrastruktur yang ada dibangun dengan memanfaatkan layanan serverless di AWS. Bagian Front-End dari aplikasi dibangun dengan memanfaatkan AWS Amplify Console, Amazon Cognito, dan Route 53. Pada bagian Back-End, logika bisnis dari aplikasi seluruhnya ditangani oleh AWS Lambda yang diintegrasikan dengan API Gateway dalam menangani HTTP Request dan Amazon DynamoDB untuk penyimpanan datanya.

Kamu bisa melihat kode dari implementasi utuh infrastruktur di atas melalui tautan: Serverless Reference Architecture: Web Application.

 

Kisah Sukses Penggunaan Serverless

Teknologi serverless bisa dianggap sebagai teknologi baru. Namun, itu bukanlah alasan untuk tidak menggunakan serverless. Faktanya, banyak perusahaan yang telah sukses dalam meningkatkan nilai bisnis mereka dengan menerapkan teknologi serverless. Mari kita lihat beberapa kisah suksesnya.

  1. Coca-Cola Company menggunakan teknologi serverless pada Coca-Cola Freestyle
    Dalam menghadapi wabah Covid-19, Coca-Cola menyediakan pengalaman transaksi yang lebih higienis melalui penggunaan teknologi touchless pada dispenser Coca-Cola Freestyle. Pelanggan dapat membeli dan menuangkan minuman melalui perangkat seluler tanpa menyentuh dispenser secara langsung. Coca-Cola berhasil menciptakan pengalaman transaksi yang baik bagi pengguna berkat penggunaan teknologi serverless dengan latensi yang rendah.
  2. Square Enix memodernisasi Image Processing pada Mobile Game Dragon Quest X
    Square Enix menyadari bahwa pengolahan gambar sangat mempengaruhi daya baterai pada permainan Dragon Quest X, terutama saat terjadi event yang membutuhkan pengguna untuk mengambil screenshot secara bersamaan. Permintaan pengolahan gambar bisa mencapai 200 hingga 300 gambar per menit, dan pada saat event tertentu bisa meningkat hingga 6.000 gambar.

    AWS Lambda memainkan peran penting dalam hal ini. Proses pengolahan gambar yang sebelumnya memakan waktu berjam-jam, kini dapat ditangani hanya dalam waktu 10 detik saja berkat penggunaan serverless.
  3. iRobot Roomba
    iRobot Roomba juga menggunakan layanan serverless untuk mengoperasikan 15 juta robot pembersih lantai Roomba mereka.

 

Rintangan dalam Menerapkan Serverless

Bagaimanapun, mengembangkan aplikasi dengan menggunakan teknologi serverless juga memiliki beberapa tantangan. Berikut adalah beberapa rintangan yang perlu diketahui.

  1. Hal Baru yang Perlu Dipelajari
    Serverless termasuk teknologi yang masih baru sehingga membutuhkan pembelajaran sebelum dapat menggunakannya. Keterbatasan jumlah ahli di bidang ini dapat menjadi tantangan saat memulai penggunaannya.
  2. Pola atau Arsitektur Baru yang Harus Diterapkan
    Serverless juga membawa tantangan baru dalam hal pola atau arsitektur aplikasi hingga pada tingkat kode. Perlu adanya pemahaman yang mendalam mengenai pola-pola tersebut untuk mengembangkan aplikasi dengan baik.
  3. Tools Baru yang Perlu Dipelajari
    Penggunaan serverless juga memerlukan pembelajaran mengenai alat baru. Sebagai contoh, kamu perlu menguasai AWS Console untuk membuat Lambda, menggunakan CloudWatch untuk melihat logging, dan mempelajari alat-alat lain yang terkait dengan penggunaan serverless.
  4. Belum Ada Best Practice yang Terpadu
    Masih belum ada praktik terbaik yang terpadu dalam mengembangkan aplikasi yang sepenuhnya memanfaatkan serverless. Para pengembang masih aktif berdiskusi dan mencari cara terbaik dalam memanfaatkan teknologi ini.

Saat menggunakan serverless, mengelola layanan-layanan tersebut bisa menjadi rumit. Salah satu cara yang sederhana tetapi tidak scalable adalah melalui antarmuka pengguna (UI) yang disediakan oleh AWS Management Console. Meskipun sederhana, pendekatan ini tidak cocok jika serverless diandalkan sebagai infrastruktur utama aplikasi yang terus berkembang.

Penggunaan antarmuka pengguna di AWS Management Console memerlukan konfigurasi manual yang melibatkan pengunggahan berkas ZIP untuk deploy fungsi, konfigurasi API Gateway, pengaturan resource seperti DynamoDB, S3 Buckets, kebijakan IAM, dan sebagainya. Semua ini memakan waktu dan melelahkan jika aplikasi terus berkembang.

Meskipun AWS menyediakan antarmuka baris perintah (command line interface), membuat kode kustom juga tidak memberikan standardisasi dan bersifat imperatif. Meskipun ini adalah langkah yang lebih baik, tetapi belum yang terbaik.

Bagaimana dengan penggunaan CloudFormation atau Terraform? Dengan alat-alat tersebut, kita dapat mendefinisikan infrastruktur dengan lebih mudah. Cukup sediakan berkas konfigurasi dan infrastruktur akan dibangun secara otomatis. Meskipun ini lebih baik daripada kode kustom, tetapi masih belum solusi terbaik. Menulis konfigurasi untuk CloudFormation atau Terraform bisa membosankan. Kode yang dihasilkan masih bersifat low-level dan dirancang untuk membangun infrastruktur AWS secara umum, bukan khusus untuk serverless.

Solusi terbaik dalam mengelola serverless adalah dengan menggunakan framework yang secara khusus didesain untuknya.

 

Framework untuk Serverless

Ada banyak framework yang dapat digunakan dalam membangun aplikasi serverless. Setiap framework menawarkan cara berbeda untuk menyederhanakan proses pembangunan aplikasi. Namun, dengan menggunakan framework, kita dapat mendapatkan beberapa keuntungan berikut.

  1. Menyamakan cara membangun aplikasi.
  2. Membuat resource yang diperlukan secara otomatis.
  3. Mengelola siklus hidup aplikasi, seperti menghapus aplikasi, memicu event, atau bahkan menjalankannya secara lokal.
  4. Menghindari ketergantungan pada satu vendor.

Meskipun teknologi serverless masih tergolong baru, terdapat banyak pilihan framework yang telah tersedia.

  1. Serverless Framework: Merupakan pionir dalam framework serverless dan paling banyak digunakan saat ini. Mendukung berbagai bahasa pemrograman seperti JavaScript (Node.js), Go, Java, Python, dan lainnya.
  2. Zappa: Framework serverless yang khusus digunakan untuk bahasa pemrograman Python.
  3. Chalice: Framework serverless dari AWS yang didesain khusus untuk bahasa pemrograman Python.
  4. Claudia.js: Framework serverless yang khusus digunakan untuk bahasa pemrograman JavaScript (Node.js).

Pada artikel ini, kita akan membahas secara rinci mengenai Serverless Framework.

 

Komponen di dalam Serverless Framework

Membangun aplikasi serverless dengan Serverless Framework melibatkan empat komponen penting.

  • Function
    Komponen pertama adalah function. Function dalam Serverless Framework adalah komponen yang melakukan proses komputasi. Jika menggunakan AWS sebagai penyedia cloud, function akan didistribusikan melalui AWS Lambda.
  • Events
    Komponen kedua adalah event. Komponen ini terhubung dengan komponen function dan menentukan event yang dapat memicu eksekusi function tersebut. Sebagai contoh, jika ingin menjalankan function saat ada HTTP Request, resource yang digunakan adalah API Gateway. Jika ingin function dijalankan saat ada unggahan file, trigger-nya bisa menggunakan Amazon S3.
  • Resources
    Komponen ketiga adalah resources. Di sini, kita dapat menentukan resource yang digunakan oleh aplikasi. Misalnya, jika aplikasi memerlukan penyimpanan data, resource database seperti DynamoDB diperlukan.
  • Plugins
    Komponen terakhir adalah Plugins. Komponen ini dapat menambahkan fitur tambahan pada Serverless Framework. Dengan menggunakan plugin, kita dapat menjalankan seluruh infrastruktur serverless secara lokal untuk pengujian, atau memanfaatkan modul bundler agar semua dependensi kode dapat di-deploy ke AWS Lambda.


Seluruh komponen ini merupakan bagian dari konsep yang disebut Service dalam Serverless Framework, yang dapat kita deploy ke teknologi serverless.

Membuat Proyek Serverless Framework

Catatan: Untuk menggunakan Serverless Framework dan men-deploy ke AWS, kamu harus menyiapkan kredensial AWS di komputermu. Ada banyak metode yang dapat digunakan, seperti menetapkan variabel lingkungan, menggunakan AWS CLI, atau mengonfigurasi langsung melalui Serverless Framework. Untuk informasi lebih lanjut, simak artikel AWS Credentials.

Langkah pertama dalam membuat proyek serverless adalah dengan menginstal paket serverless secara global melalui Package Manager JavaScript. Jika kamu menggunakan npm, gunakan perintah berikut.

Setelah menginstal paket serverless secara global, perintah “serverless” atau “sls” (sebagai alias) akan tersedia di Terminal.

Selanjutnya, kamu dapat memulai proyek dengan membuat folder baru, misalnya “hello-serverless”, dan buka folder tersebut dengan editor teks favoritmu.

Agar folder tersebut dianggap sebagai proyek serverless, kamu perlu membuat berkas konfigurasi serverless dengan nama “serverless.js” di dalamnya. Dalam berkas tersebut, kita akan menuliskan konfigurasi komponen-komponen serverless yang akan dibuat.

Berikut adalah contoh konfigurasi dasar dari aplikasi serverless dengan satu fungsi yang dijalankan oleh HTTP event.


Dari konfigurasi di atas, dapat terlihat bahwa kita sedang membangun sebuah fungsi bernama “hello”. Handler dari fungsi tersebut diambil dari berkas JavaScript yang terletak di “src/functions/hello.js”. Selain itu, kita juga dapat melihat bahwa event yang memicu fungsi tersebut adalah HTTP GET pada path “/hello”.

Sebelum mencoba men-deploy service, kita perlu membuat terlebih dahulu fungsi handler (lambda) di berkas “src/functions/hello.js”. Silakan buat berkas JavaScript baru di lokasi tersebut dan tulis kode dasar AWS Lambda berikut.


Simpan semua perubahan, lalu deploy service menggunakan perintah berikut.

Hasilnya akan terlihat seperti ini.

Perintah untuk men-deploy serverless framework.

Dengan menjalankan perintah di atas, Serverless Framework secara otomatis akan menghasilkan skrip CloudFormation dan segera men-deploy infrastruktur serverless ke AWS. Canggih, bukan?

Kamu tidak perlu repot lagi menyiapkan resource secara manual karena dengan satu perintah saja, kamu berhasil membuat aplikasi serverless pertamamu!

Kamu dapat mengakses kode yang telah di-deploy dengan mengakses URL yang dihasilkan oleh serverless.

Akses kode serverless framework.

Kesimpulan Serverless Framework

Dalam artikel ini, kita membahas tentang teknologi serverless dan pentingnya menggunakan Serverless Framework dalam membangun aplikasi serverless. Teknologi serverless menawarkan berbagai keuntungan, termasuk skalabilitas yang baik, biaya yang efisien, dan manajemen infrastruktur yang lebih mudah.

Namun, membangun aplikasi serverless juga memiliki tantangan sendiri. Kita perlu mempelajari konsep serverless, pola atau arsitektur baru, dan menggunakan berbagai tools yang terkait. Selain itu, masih belum ada best practice yang terpadu dalam mengembangkan aplikasi serverless.

Dalam mengelola layanan serverless, menggunakan UI yang disediakan oleh AWS Management Console mungkin merupakan cara yang sederhana, tetapi tidak bersifat scalable. Alternatifnya, penggunaan custom scripts, CloudFormation, atau Terraform dapat memudahkan pengelolaan dan deployment aplikasi serverless.

Di antara banyak opsi framework yang tersedia, Serverless Framework menjadi pilihan yang paling populer. Framework ini menyederhanakan cara membangun aplikasi serverless, menawarkan fitur-fitur penting seperti pengaturan fungsi, event, resource, dan plugin.

Artikel ini juga menggambarkan langkah-langkah untuk membuat proyek Serverless Framework, termasuk instalasi paket, konfigurasi berkas, pembuatan fungsi handler, dan deployment aplikasi. Dengan menggunakan Serverless Framework, kita dapat dengan mudah mengelola infrastruktur serverless dan men-deploy aplikasi ke AWS.

Dalam rangka membangun aplikasi serverless yang efektif, perlu memahami konsep-konsep dasar dan menggunakan alat yang tepat. Dengan memanfaatkan teknologi serverless dan Serverless Framework, kita dapat mengembangkan aplikasi yang efisien, mudah dikelola, dan berpotensi meningkatkan nilai bisnis.

Sampai jumpa dalam artikel selanjutnya!


Belajar Pemrograman Gratis
Belajar pemrograman di Dicoding Academy dan mulai perjalanan Anda sebagai developer profesional.