Lambda merupakan salah satu produk AWS yang menawarkan tekonologi serverless yang menawarkan kemudahan bagi pengguna untuk menjalankan fungsi-fungsi (atau bahkan aplikasi) tertentu tanpa harus mengelola server secara langsung (serverless). Lambda saat ini sudah mendukung bahasa pemrograman PHP, walaupun tidak seperti dukungan terhadap NodeJS, Python, dan GO, dukungan terhadap PHP diberikan dengan menggunakan Runtime API. 

Beberapa waktu lalu saya sempat mengikuti acara workshop serverless PHP yang diisi oleh Petra Novandi Barus. Pada acara itu dicontohkan penggunaan Serverless PHP dengan menggunakan Framework Laravel. Dan beruntungnya materi workshop tersebut dibagikan secara online oleh Petra Novandi Barus dan mungkin jika sudah memperoleh izin akan saya bagikan disini. Karena contoh dengan Laravel sudah dibuatkan oleh Petra Novandi Barus maka saya akan membuat contoh Serverless PHP dengan menggunakan Yii2.

Layout tulisan ini mungkin tidak terlalu banyak. Mudah-mudahan ada waktu dan semangat untuk menulis seriesnya. Secara garis besar layout series seperti di bawah ini.

  1. Menggunakan Yii2 pada AWS Lambda
  2. Skenario Fungsi Cek Status Website
  3. Skenario apalagi ya...

Requirement

Untuk memudahkan mengikuti series ini maka beberapa hal yang perlu diperhatikan diantaranya:

  1. Sistem operasi yang saya gunakan adalah Windows 10
  2. Sudah terinstalasi Composer dan NodeJS, jika belum lakukan instalasi terlebih dahulu karena banyak proses akan bergantung pada perintah kedua aplikasi tersebut

Instalasi Framework Serverless

Serverless adalah framework yang dapat digunakan untuk pengembangan dan deploy aplikasi serverless anda ke penyedia serverless (AWS, Azure, Google Cloud, dll). Untuk itu kita perlu menginstall terlebih dahulu Framework Serverless di komputer kita. Selain instalasi kita juga perlu mengkonfigurasi serverless nanti agar terhubung dengan layana AWS agar dapat melakukan deploy secara langsung.

Untuk menginstalasi Serverless jalankan perintah berikut pada terminal.

npm install -g serverless

Kemudian hubungkan serverless anda dengan AWS. Namun sebelumnya anda harus terlebih dahulu membuat AWS access key. Jika anda belum membuat access key kunjungi link berikut. Kemudian atur konfigurasi koneksi serverless anda dengan perintah berikut.

serverless config credentials --provider aws --key <key> --secret <secret>

Instalasi Yii2-Micro

Pada contoh kali ini kita hanya akan memunculkan aplikasi sederhana yang memberikan balasan "Hello World" ketika endpoint di kunjungi. Untuk itu kita akan menggunakan Yii2 sebagai MicroFramework dengan menggunakan boilerplate hoaaah/yii2-micro  Lakukan instalasi Yii2-Micro dengan perintah berikut.

 

composer create-project --prefer-dist hoaaah/yii2-micro yii2-serverless

Instalasi Bref

Setelah instalasi selesai kita akan melakukan instalasi bref/bref yang akan digunakan sebagai runtimes PHP pada AWS lambda. Silakan lakukan instalasi bref pada aplikasi Yii2-Micro anda dengan perintah berikut.

cd yii2-serverless
composer require bref/bref

Jalankan perintah init berikut untuk menginisiasi aplikasi serverless anda.

 

vendor\bin\bref init

Kemudian modifikasi file serverless.yml anda agar terlihat seperti di bawah ini.

service: serverless-php

provider:
    name: aws
    region: ap-southeast-1
    runtime: provided

plugins:
    - ./vendor/bref/bref

functions:
    website:
        handler: web/index.php
        timeout: 28 # in seconds (API Gateway has a timeout of 29 seconds)
        layers:
            - ${bref:layer.php-73-fpm}
        events:
            -   http: 'ANY /'
            -   http: 'ANY /{proxy+}'

Serverless Deploy

Sebelum melakukan deploy pada Lambda, kita perlu memodifikasi aplikasi Yii2. Ubah config.php sehingga tampak seperti di bawah ini. Bagian penting dari modifikasi kita adalah pada bagian components\request\scriptUrl  yang diisi dengan dev, sehingga akses endpoint lambda yang kita gunakan adalah dev. Saya belum menemukan cara mengatasi masalah ini, tapi sebagai aplikasi yang nantinya akan event-driven penggunaan dev sepertinya tidak terlalu masalah. Jika pemecahannya saya temukan saya akan update tulisan ini.

<?php

return [
    'id' => 'micro-app',
    // the basePath of the application will be the `micro-app` directory
    'basePath' => __DIR__,
    // this is where the application will find all controllers
    'controllerNamespace' => 'micro\controllers',
    // set an alias to enable autoloading of classes from the 'micro' namespace
    'aliases' => [
        '@micro' => __DIR__,
    ],
    'components' => [
        'request' => [
            'scriptUrl' => 'dev',
        ],
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'sqlite:@micro/database.sqlite',
        ],
    ],
];

Kemudian deploy aplikasi anda ke AWS Lambda dengan perintah berikut.

serverless deploy

Perintah di atas akan menampilkan endpoints dari aplikasi anda. Kunjungi endpoints tersebut dan anda akan mendapat balasan berupa kalimat "Hello World" dari Yii2 Micro anda.


Demikian series kali ini, semoga bermanfaat dan Happy Coding!