AWS Lambda adalah layanan komputasi serverless yang disediakan oleh AWS, merupakan salah satu layanan serverless yang paling populer dan digunakan oleh banyak developer di seluruh dunia. AWS Lambda memungkinkan kita untuk menjalankan kode program saat terjadi event tertentu (event-driven) yang bersumber dari layanan AWS lain, misalnya saat ada http request ke sebuah endpoint API Gateway, ada objek/file baru ditambahkan ke sebuah bucket S3 dan sebagainya. Kita dapat menulis dan mengupload kode program dalam bahasa pemrograman yang didukung ke AWS Lambda, kemudian mengatur layanan AWS apa yang akan memicu dijalankan kode program tersebut.
Cara kerja AWS Lambda (sumber: https://aws.amazon.com/lambda/)
Istilah runtime pada AWS Lambda mengacu pada versi bahasa pemrograman yang digunakan untuk mengeksekusi kode. Saat buku ini dibuat, AWS Lambda mendukung beberapa runtime bahasa pemrograman secara native diantaranya:
Name | Identifier | AWS SDK for Python | Operating System |
---|---|---|---|
Python 3.8 | python3.8 | boto3-1.10.34 botocore-1.13.34 | Amazon Linux 2 |
Python 3.7 | python3.7 | boto3-1.10.34 botocore-1.13.34 | Amazon Linux |
Python 3.6 | python3.6 | boto3-1.10.34 botocore-1.13.34 | Amazon Linux |
Python 2.7 | python2.7 | boto3-1.10.34 botocore-1.13.34 | Amazon Linux |
Name | Identifier | AWS SDK for JavaScript | Operating System |
---|---|---|---|
Node.js 12 | nodejs12.x | 2.585.0 | Amazon Linux 2 |
Node.js 10 | nodejs10.x | 2.585.0 | Amazon Linux 2 |
Name | Identifier | AWS SDK for Ruby | Operating System |
---|---|---|---|
Ruby 2.5 | ruby2.5 | 3.0.1 | Amazon Linux |
Name | Identifier | JDK | Operating System |
---|---|---|---|
Java 11 | java11 | amazon-corretto-11 | Amazon Linux 2 |
Java 8 | java8 | java-1.8.0-openjdk | Amazon Linux |
Name | Identifier | Operating System |
---|---|---|
Go 1.x | go1.x | Amazon Linux |
Name | Identifier | Languages | Operating System |
---|---|---|---|
.NET Core 2.1 | dotnetcore2.1 | C# PowerShell Core 6.0 | Amazon Linux |
Jika kita ingin menggunakan bahasa pemrograman lain seperti PHP, kita dapat menggunakan custom runtime, untuk informasi lebih lanjut silahkan kunjungi link berikut: https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html
Beberapa keuntungan yang kita dapatkan saat menggunakan AWS Lambda diantaranya:
AWS Lambda menggunakan model pricing pay-what-you-use, model pricing seperti ini akan menjadikan AWS Lambda lebih hemat biaya karena kita hanya akan membayar saat kode program dijalankan saja.
AWS Lambda akan memastikan kode program dapat dijalankan kapanpun saat dibutuhkan dalam skala apapun. Kita tidak perlu mengkonfigurasi secara manual karena AWS Lambda memiliki fitur Automatic Scaling.
Kapasitas komputasi AWS Lambda tersedia di beberapa data center (Availability Zones) yang ada di suatu region. Hal ini menjadikan kode yang kita host di AWS Lambda akan selalu tersedia walaupun terjadi masalah di salah satu fasilitas data center.
Integrasi dengan layanan-layanan AWS lain seperti DynamoDB, API Gateway, S3, SQS dan sebagainya menjadikan AWS Lambda sangat powerful dan dapat kita gunakan untuk membangun aplikasi serverless yang utuh dan menyeluruh.
Berikut ini adalah beberapa limitasi dari AWS Lambda:
Jika kita perlu menjalankan fungsi yang memerlukan durasi eksekusi lebih dari 15 menit, maka AWS Lambda tidak bisa digunakan untuk menjalankan fungsi tersebut.
Jika kita membutuhkan ram lebih dari 3,008 MB untuk menjalankan kode program kita, maka AWS Lambda bukan pilihan yang tepat.
Ukuran file kode yang akan kita jalankan di AWS Lambda tidak boleh lebih dari 50 MB jika di zip atau 250 MB jika tidak di zip.
AWS Lambda memiliki limit 1000 konkurensi untuk setiap akun di satu region, limit ini bisa ditambah dengan menghubungi AWS Support Center console
Ukuran data payload maksimal yang dapat dikirim (request) dan diterima (response) saat menjalankan fungsi secara synchronous adalah sebesar 6 MB.
Untuk informasi lengkap mengenai limitasi dari AWS Lambda bisa lihat di https://docs.aws.amazon.com/lambda/latest/dg/limits.html
Seperti yang telah disebutkan sebelumnya bahwa model pricing AWS Lambda adalah kita hanya membayar apa yang digunakan saja (pay-only-what-you-use). Ada beberapa aspek yang menentukan biaya AWS Lambda seperti jumlah request dan durasi komputasi dari sebuah kode program. Yang menarik, setiap bulannya kita mendapatkan gratis penggunaan AWS lambda (free tier) hingga 1 juta requests dan 400,000 GB-seconds durasi komputasi. Selain itu, harga AWS Lambda juga ditentukan oleh region dan jumlah memori yang digunakan, berikut ini adalah harga AWS Lambda untuk region Asia Pacific (Singapore).
Aspek | Harga |
---|---|
Requests | $0.20 per 1 Juta requests |
Durasi | $0.000016667 setiap GB-second |
Contoh perhitungan biaya AWS Lambda:
Misalnya kita memiliki sebuah fungsi yang di deploy ke AWS Lambda di region Asia Pacific (Singapore), fungsi ini akan membuat thumbnail dari file gambar/foto yang diupload ke sebuah S3 bucket yang ada di region yang sama. Dalam sebulan, fungsi ini dieksekusi sebanyak 2 juta kali dan setiap eksekusi rata-rata membutuhkan waktu sekitar 200 ms, adapun memory yang digunakan untuk mengeksekusi fungsi tersebut adalah 1536 MB. Berapa biaya AWS lambda yang harus dikeluarkan dalam satu bulan?
Jawaban:
Biaya Requests
= (2 x $0.20) - (free tier 1 x 0.20 )
= $0.40 - $0.20
= $0.20
Biaya Durasi
= ((2,000,000 x 1.5 GB x 0.2 seconds) - ( free tier 400,000 GB-seconds) ) x $0.000016667
= (600,000 GB-seconds - 400,000 GB-seconds ) x $0.000016667
= 200.000 GB-seconds x $0.000016667
= $3.33
Total Biaya AWS Lambda = Biaya Requests + Biaya Durasi = $0.20 + $3.33= $3.53
Catatan: Selain biaya requests dan durasi, kita juga mungkin dikenakan biaya lain seperti data transfer, info selengkapnya baca disini: https://aws.amazon.com/lambda/pricing/
Istilah handler di AWS Lambda mengacu kepada sebuah fungsi/method yang akan dijalankan saat sebuah event tertentu terjadi. Pada bagian ini, kita akan coba mempelajari bagaimana membuat handler AWS Lambda dengan Node.js runtime. Sebagai contoh, kita akan coba membuat sebuah handler yang akan dijalankan saat ada http request ke sebuah endpoint API Gateway, kita akan membuatnya secara langsung di AWS Management Console region Asia Pacific (Singapore).
Buka AWS Lambda Console region Asia Pacific (Singapore) di link berikut :
https://ap-southeast-1.console.aws.amazon.com/lambda/home, klik tombol Create function untuk membuka halaman Create function.
Daftar fungsi AWS Lambda di Region Asia Pacific (Singapore)
Pada halaman Create function, pilih Author from scratch, isi Function name dengan nama fungsi yang akan dibuat misalnya hello-lambda, pilih Runtime Node.js 12.x, kemudian klik tombol Create function.
Setelah fungsi baru berhasil dibuat, kita akan diarahkan ke halaman konfigurasi untuk fungsi tersebut. Dengan menggunakan fitur Designer yang ada di halaman tersebut, kita akan menambahkan trigger berupa API Gateway. Klik tombol Add trigger untuk membuka halaman Add trigger.
Pada halaman Add trigger, pilih API Gateway.
Masih di halaman Add trigger, pada bagian Trigger configuration untuk API Gateway, Pilih Create New API untuk API, pilih HTTP API untuk API type dan pilih Open untuk Security, kemudian klik tombol Add.
Setelah trigger berhasil ditambahkan, kita akan diarahkan kembali ke halaman Function Configuration, disana terdapat endpoint API Gateway untuk menjalankan fungsi hello-lambda.
Buka endpoint tersebut di browser dan lihat apa yang muncul.
Sekarang, kita akan coba edit fungsi tersebut, pada halaman Function Configuration di bagian Designer, klik nama fungsi yang kita miliki yaitu hello-lambda untuk membuka menu konfigurasi untuk fungsi tersebut.
Selanjutnya, lihat bagian Function code, disana terdapat kode editor yang dapat kita gunakan untuk mengedit kode handler fungsi hello-lambda. Selain kode editor, kita juga dapat mengupload kode dalam .zip file atau menggunakan Amazon S3.
Sekarang, kita akan coba mengedit kode handler yang ada di file index.js
File index.js sebelum diedit:
exports.handler = async (event) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
return response;
};
File index.js sesudah diedit:
exports.handler = async (event,context) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify({event,context}),
};
return response;
};
Simpan kode index.js yang telah kita edit dengan mengklik tombol Save.
Buka kembali endpoint API Gateway untuk menjalankan fungsi hello-lambda di browser, kemudian lihat respon JSON yang diberikan.
Dibawah ini adalah contoh respon yang sudah di format:
{
"event": {
"version": "2.0",
"routeKey": "ANY /hello-lambda",
"rawPath": "/default/hello-lambda",
"rawQueryString": "",
"headers": {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"accept-encoding": "gzip, deflate, br",
"accept-language": "id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7,ms;q=0.6,de;q=0.5",
"content-length": "0",
"host": "eckrq9x8yc.execute-api.ap-southeast-1.amazonaws.com",
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "none",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36",
"x-amzn-trace-id": "Root=1-5f504df2-f3fb2a503574c440c4205a20",
"x-forwarded-for": "103.213.131.188",
"x-forwarded-port": "443",
"x-forwarded-proto": "https"
},
"requestContext": {
"accountId": "663027411829",
"apiId": "eckrq9x8yc",
"domainName": "eckrq9x8yc.execute-api.ap-southeast-1.amazonaws.com",
"domainPrefix": "eckrq9x8yc",
"http": {
"method": "GET",
"path": "/default/hello-lambda",
"protocol": "HTTP/1.1",
"sourceIp": "103.213.131.188",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36"
},
"requestId": "SREd6j1HyQ0EPIw=",
"routeKey": "ANY /hello-lambda",
"stage": "default",
"time": "03/Sep/2020:01:59:14 +0000",
"timeEpoch": 1599098354570
},
"isBase64Encoded": false
},
"context": {
"callbackWaitsForEmptyEventLoop": true,
"functionVersion": "$LATEST",
"functionName": "hello-lambda",
"memoryLimitInMB": "128",
"logGroupName": "/aws/lambda/hello-lambda",
"logStreamName": "2020/09/03/[$LATEST]2fab362685b74521a44e15f24f98b6f7",
"invokedFunctionArn": "arn:aws:lambda:ap-southeast-1:663027411829:function:hello-lambda",
"awsRequestId": "f057c64b-3d1d-429a-a42a-b65c3f74063a"
}
}
Dari respon tersebut kita dapat melihat terdapat dua argumen yang diteruskan ke sebuah handler yaitu event dan context. Argumen pertama yaitu event berupa sebuah objek yang berisi informasi mengenai event apa yang menjalankan fungsi tersebut, dalam contoh fungsi hello-lambda argumen event ini akan berisi informasi dari API Gateway seperti headers, httpMethod, body, dan sebagainya. Argumen kedua yaitu context berupa sebuah objek yang berisi informasi mengenai fungsi yang dijalankan/dieksekusi seperti functionName, functionVersion, memoryLimitInMB dan sebagainya.
Copyright © JagoReact.com 2025.