Mencegah Error Module Not Found Saat Deploy Serverless App Menggunakan NodeJs

Septian Riza Saputra
3 min readDec 4, 2020

Mengenal Arsitektur Serverless

Arsitektur serverless membuat kita dapat mengembangkan aplikasi web dengan konfigurasi seminimal mungkin. Less pada istilah serverless bukan berarti tidak sama sekali, tapi mempunyai arti dikurangi. Sehingga ketika kita ingin deploy aplikasi serverless kita, kita tidak perlu berinteraksi banyak melalui jalan seperti SSH atau remote connection lainnya. Kita sudah dimudahkan dengan konsol berbasis web yang disediakan oleh penyedia layanan. Contoh lainnya adalah kita men-deploy suatu kode yang tinggal dihubungkan ke proxy tanpa harus mengotak — atik konfigurasi web server. Atau memilih kode mana yang akan dieksekusi jika suatu antrian sudah didatangi oleh jutaan message yang antri dalam queue service.

Perhatian utama dari arsitektur serverless antara lain:

  • availability, layanan harus tersedia 24/7 tanpa down kecuali terjadi error saat deploy kode
  • scalability, scaling mudah ketika terjadi lonjakan pengunjung dan penggunaan resource serta adanya auto scaling
  • service integration, dapat menggunakan semua layanan yang ada di penyedia layanan arsitektur serverless
  • minimal deployment, konfigurasi minimal tanpa harus masuk settingan inti. misal masuk ke konfigurasi web server secara langsung untuk melakukan proxying terhadap aplikasi
  • cost reduction, mengurangi biaya untuk mengelola infrastruktur sendiri
  • managable, dapat dikelola dengan mudah dan cepat melalui konsol yang mudah digunakan dan kenyamanan yang diutamakan
  • monitoring, monitoring tidak terbatas pada melihat penggunaan resource melalui CLI.

Masalah Deploying Yang Sering Muncul Saat Bekerja Secara Team

Masalah yang sering muncul saat kita mengembangkan service serverless secara team adalah terkadang beberapa anggota team lupa melakukan npm install saat team lain baru saja menambahkan library npm baru, sehingga saat deploying telah sukses dilakukan service yang telah sukses di deploy tersebut tidak bisa berjalan sebagaimana mestinya. Hal tersebut terkadang saya alami di kantor tempat saya bekerja yaitu Tokocrypto.com. Hali ini di karenakan module yang tidak ditemukan, berikut contoh errornya:

Error: Cannot find module 'moment'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:364:17)
at require (module.js:380:17)

Auto Check Dependencies Menggunakan Library Serverless Plugin Scripts

Serverless Plugin Scripts menyediakan kemampuan untuk menjalankan kustom script javascript ke dalam serverless, script tersebut dapat berupa sebuah kustom serverless command cli ataupun memanggil script tersebut di semua serverless command cli menggunakan sebuah event hook yang ada pada serverless lifecycle event.

Untuk mengatasi masalah error module not found maka kita akan membuat sebuah kode js dan menggunakan library check-dependencies untuk melakukan Auto Check Dependencies setiap command-cli sls deploy dijalankan. Jika terdapat module dalam package.json yang belum terinstall maka command tersebut akan me-return error dan prosess deploying akan di stop. Ikuti langkah2 berikut untuk integrasi kode tersebut

Install Serverless Plugin Scripts

Tambahkan 2 plugin ini ke dalam project serverless:

npm install --save serverless-plugin-scripts --dev

npm install --save check-dependencies --dev

aktifkan serverless plugin scripts dengan menambahkan kode berikut ke dalam serverless.yml file:

plugins:- serverless-plugin-scripts

Menambahkan Script Sederhana dalam Hooks

Kita akan membuat kode javascript sederhana untuk mengecheck apakah dependencies yang ada pada package.json sudah terinstall semua

var cd = require('check-dependencies').sync({});
if(cd.error.length>0)
throw new Error(JSON.stringify(cd.error))

Kita akan menjalankan script diatas kedalam event package:initialize pada hooks serverless plugin scripts, tambahkan kode berikut didalam bagian custom pada file serverless.yml,

custom:
scripts:
hooks:
'package:initialize': node -e "var cd = require('check-dependencies').sync({});if(cd.error.length>0) throw new Error(JSON.stringify(cd.error))"

Maka saat kita belum menginstall salah satu depedencies yg ada didalam package.json error berikut akan muncul saat melakukan deploying.

Error Deploying saat library faker belum terinstall

Maka saat ada penambahan library atau dependencies baru kedalam pacakge.json semua team bisa melakukan perintah deploying serverless dengan aman.

Salam Koding,,,

--

--

Septian Riza Saputra

Senior Backend Developer at Tokocrypto. Love to Eat, Code, Pray and Ride a Mountain Bike