Membangun Aplikasi Web Serverless Laravel dengan Menggunakan Bref dan Serverless Framework

Ridwan Fajar
Serverless Indonesia
4 min readMay 28, 2020
Area perkebunan warga di Pasanggrahan, Areal Bandung Utara, Kabupaten Bandung, Jawa Barat, Indonesia

Pendahuluan

Seperti yang kita ketahui ada beberapa cara deployment suatu aplikasi web yang dibuat dengan bahasa pemrograman PHP, terlebih dengan web framework Laravel. Diantara cara melakukan deployment tersebut antara lain:

  • Shared hosting
  • Virtual Private Server (misal di instance EC2, Digital Ocean, Azure VM, GCP Compute, etc.)
  • Platform as A Service atau PaaS (misal di Elastic Beanstalk, Heroku, Azure App Service, Google AppEngine, etc.)
  • Containerization dengan Docker

Dari beberapa cara deployment diatas, ada satu lagi cara yang mungkin belum lumrah dilakukan tapi sangat mungkin untuk dicoba. Cara tersebut dapat dilakukan dengan men-deploy-nya ke AWS Lambda.

Seperti yang kita tahu, AWS Lambda adalah managed service untuk deployment berbasis Function as A Service (FaaS), dimana aplikasi yang di-deploy dapat berupa sebuah function saja yang akan dihubungkan dengan event trigger dari layanan AWS lainnya. Misal function di AWS Lambda dihubungkan dengan API Gateway untuk menerima event berupa HTTP Request.

Tapi dengan adanya Serverless Framework dan Bref, sebuah aplikasi web berbasis Laravel pun dapat di-deploy ke AWS Lambda. Idealnya yang di-deploy berupa RESTful API agar separasi lebih jelas dari bagian frontend-nya.

Untuk mendapatkan gambaran lebih jelas mengenai Bref, Anda dapat mengunjungi dua artikel berikut ini:

A. Persiapan

Seperti biasa, Anda harus memastikan bahwa beberapa requirements ini harus tersedia di komputer kita:

  • AWS Secret Key dan Access Key
  • AWS CLI
  • NPM
  • Serverless Framework
  • Composer

Kemudian sebagai ilustrasi, misal ada sebuah project dengan nama pokemon-api, dimana terdapat dua endpoint yaitu:

  • /, akan menampilkan pesan hello world yang agak panjang
  • /pokemon , akan menampilkan daftar Pokemon yang dimuat dari file CSV yang disimpan di storage/app di dalam direktori project. Sebagai ilustrasi, berikut adalah contoh proyek Laravel yang akan di deploy.
Ilustrasi 1 — Struktur proyek Laravel yang akan di-deploy ke AWS Lambda

Sedangkan berikut ini adalah snippet dari routes/web.php, dimana kode untuk kedua endpoint diatas berada:

Untuk melakukan deployment ke AWS Lambda, proyek Laravel ini memerlukan Bref. Sehingga kita harus menyertakannya dalam proyek Laravel menggunakan Composer. Perintah yang dijalankan adalah composer require bref/bref seperti pada gambar berikut ini:

Ilustrasi 2 — proses saat menyertakan Bref ke proyek Laravel menggunakan Composer

B. Deploy ke AWS Lambda

Untuk melakukan deployment ke AWS Lambda, di dalam direktori pokemon-api diperlukan sebuah file bernama serverless.yml. File tersebut berisi sejumlah definisi yang akan menjalankan proses deployment ke AWS Lambda. Berikut adalah isi file serverless.yml:

Pada snippet diatas, kita masukkan bebebrapa direktori dibawah key exclude agar tidak disertakan dalam proses deployment . Kemudian, functions yang akan di-deploy adalah berupa website sehingga nantinya akan tercipta dua buat komponen AWS yaitu AWS Lambda dan AWS API Gateway yang saling terhubung dengan method ANY.

Untuk handler-nya sendiri, kita bidik file index.php yang berada di dalam direktori public. File tersebut merupakan entry point bagi aplikasi web Laravel untuk menangani HTTP request dari client.

Sekarang kita dapat melanjutkannya dengan melakukan optimasi terlebih dahulu agar ukuran proyek yang di-deploy lebih ramping. Perintah yang dieksekusi adalah composer install --prefer-dist --optimize-autoloader --no-dev seperti pada kedua gambar berikut ini:

Ilustrasi 3 — Proses optimasi aset Composer di proyek Laravel agar ukuran deployment lebih ramping
Ilustrasi 4 — lanjutan dari Ilustrasi 3

Begitu selesai melakukan proses optimasi deployment, sekarang kita dapat lanjutkan dengan melakukan deploymentnya menggunakan perintah serverless deploy seperti pada gambar berikut ini:

Ilustrasi 5 — output dari deployment dengan menggunakan serverless framework ke AWS Lambda untuk proyek laravel

Akhirnya, proyek Laravel kita berhasil di-deploy ke AWS Lambda. Anda dapat melihat ada endpoints yang berhasil dibuatkan AWS untuk proyek Laravel yang baru saja kita deploy ke AWS Lambda.

Sekarang saatnya mencoba hasil deployment.

C. Menguji hasil deployment

Anda dapat membuka URL yang diberikan oleh output serverless deploy langsung di web browser atau melalui HTTP client lainnya (misal Curl, Postman, Insomnia, dan lainnya).

Bila / endpoint berhasil diakses, maka akan ada tampilan seperti pada gambar berikut ini:

Ilustrasi 6 —respon dari root endpoint

Bila kita coba buka /pokemon , maka akan muncul sejumlah Pokemon di endpoint ini. Diasumsikan bahwa endpoint berikut sudah dapat digunakan oleh clientside yang dapat ditulis dengan menggunakan Javascript framework seperti React.js, Angular.js, Vue.js dan lainnya.

Ilustrasi 7 — respon dari pokemon endpoint

Bila dirasa proyek Laravel tersebut akan diterminasi karena ada perintah dari manajemen. Kita dapat menghapusnya dari AWS Lambda dengan menggunakan perintah serverless remove seperti pada gambar berikut ini:

Ilustrasi 8 — contoh output dari menghapus proyek AWS Lambda dengan serverless framework

Kesimpulan

Dengan demikian proyek Laravel berupa RESTful API dapat di-deploy ke AWS Lambda menggunakan Serverless Framework dan Bref. Anda dapat melakukan banyak kustomisasi di dalam serverless.yml sesuai kebutuhan Anda.

Terima kasih kepada Fajri Abdillah yang sudah membantu me-review artikel ini

--

--