AWS Lambda - NODEJS'de İşlev
Nodejs, AWS Lambda işlevinin desteklediği dillerden biridir. Nodejs ile desteklenen sürüm v6.10 ve v8.10'dur. Bu bölümde, NODEJS'deki AWS Lambda işlevinin çeşitli işlevlerini ayrıntılı olarak öğreneceğiz.
NodeJS'de işleyici
AWS Lambda işlevini nodejs'de yazmak için önce bir işleyici bildirmeliyiz. Nodejs'deki işleyici, dosyanın adı ve dışa aktarma işlevinin adıdır. Örneğin, dosyanın adıindex.js ve dışa aktarma işlevi adı lambda handler, dolayısıyla karşılık gelen işleyicisi index.lambdahandler
Burada gösterilen örnek işleyiciyi inceleyin -
exports.lambdahandler = function(event, context, callback) { //code goes here}
İşleyiciye Parametreler
İşleyici, Lambda işlevini oluşturmanın ana çekirdeğidir. İşleyici üç parametre alır:event, context ve callback.
Etkinlik Parametresi
Tetiklenen olayın tüm ayrıntılarına sahiptir. Örneğin, S3'te tetiklenecek Lambda işlevini kullanıyorsak, olay S3 nesnesinin ayrıntılarına sahip olacaktır.
Bağlam Parametresi
Lambda işlevinin özellikleri ve yapılandırma ayrıntıları gibi bağlamın ayrıntılarına sahiptir.
Geri Arama Fonksiyonu
Arayan kişiye ayrıntıları geri vermede yardımcı olur. Geri aramanın yapısı aşağıdaki gibidir -
callback(error, result);
Geri arama işlevinin parametreleri aşağıda açıklanmıştır -
Error −Bu, Lambda işlevinin yürütülmesi sırasında herhangi bir hata meydana gelirse ayrıntılara sahip olacaktır. Lambda işlevi başarılı olursa,null geri arama işlevi için ilk parametre olarak geçirilebilir.
Result −Bu, lambda işlevinin başarılı bir şekilde yürütülmesinin ayrıntılarını verecektir. Bir hata oluşursa, sonuç parametresi dikkate alınmaz.
Note −AWS Lambda'da geri arama işlevinin kullanılması zorunlu değildir. Geri çağırma işlevi yoksa, işleyici onu boş olarak döndürecektir.
Geçerli geri arama imzaları aşağıda verilmiştir -
callback(); // It will return success, but no indication to the caller
callback(null); // It will return success, but no indication to the caller
callback(null, "success"); // It will return the success indication to the caller
callback(error); // It will return the error indication to the caller
AWS Lambda çalıştırıldığında, hata veya başarı gibi geri arama ayrıntıları, varsa konsol mesajlarıyla birlikte AWS CloudWatch'a kaydedilir.
Nodejs8.10'da AWS Lambda ile çalışma
AWS Lambda ile nodejs8.10'da nasıl çalışılacağını anlayalım ve işlevi senkronize ve zaman uyumsuz bir şekilde çağıralım.
Lambda İşlevini Eşitleme Yolunda Çağırma
Aşağıdaki örnek, Lambda işlevini senkronize bir şekilde çağırma hakkında size bir fikir verir -
exports.handler = function(event, context, callback) {
let arrItems = [4,5,6,8,9,10,35,70,80,31];
function countevennumbers (items) {
return new Promise(resolve => {
setTimeout(() => {
let a = 0;
for (var i in items) {
if (items[i] % 2 == 0) {
a++;
}
}
resolve(a);
},2000);
});
}
let evennumber = countevennumbers(arrItems);
callback(null,'even numbers equals ='+evennumber);
};
Bu kodu AWS konsolunda test ettikten sonra aşağıdaki çıktıyı gözlemleyebilirsiniz -
Yukarıdaki kodun çıktısının bir vaat nesnesi olduğuna dikkat edin. Sayım bir setTimeout içinde arttığından ve işlev çağrısı setTimeout içinde yürütmeyi beklemediğinden ve promise nesnesini döndürdüğünden, sayımı vermez.
Biz olsaydı async/await işleyici işlevinde lambda işlevinin tam çıktısını alır.
İşleyiciyi Async Bir Şekilde Çağırma
Aşağıdaki örnek, Lambda işlevini zaman uyumsuz bir şekilde çağırma hakkında size bir fikir verir -
exports.handler = async function(event, context, callback) {
let arrItems = [4,5,6,8,9,10,35,70,80,31];
function countevennumbers (items) {
return new Promise(resolve => {
setTimeout(() => {
let a = 0;
for (var i in items) {
if (items[i] % 2 == 0) {
a++;
}
}
resolve(a);
}, 2000);
});
}
let evennumber = await countevennumbers(arrItems);
callback(null,'even numbers equals ='+evennumber);
};
Biz ekledik async ve awaityukarıdaki kodda. Kullandığımız zamanawaitİşlev çağrısının yanında, işlevin içindeki söz çözülene kadar yürütme durur. Bunu not etawait sadece için geçerlidir async fonksiyonlar.
Bu kodu AWS konsolunda test ettikten sonra aşağıdaki çıktıyı gözlemleyebilirsiniz -
NodeJS'deki ContextDetails
Bağlam nesnesi, Lambda işlevinin adı, milisaniye cinsinden kalan süre, istek kimliği, bulut saat grubu adı, zaman aşımı ayrıntıları vb. Gibi ayrıntıları verir.
Aşağıdaki tablolar, bağlam nesnesiyle kullanılabilen yöntemlerin ve özniteliklerin listesini gösterir -
Bağlam nesnesi için kullanılabilen yöntem
Sr.No | Yöntem Adı ve Açıklaması |
---|---|
1 | getRemainingTimeInMillis() Bu yöntem, Lambda işlevi işlevi sonlandırana kadar kalan süreyi milisaniye cinsinden verir |
Bağlam nesnesi için kullanılabilen öznitelikler
Sr.No | Öznitelik adı ve Açıklama |
---|---|
1 | functionName Bu, AWS Lambda işlev adını verir |
2 | functionVersion Bu, AWS Lambda işlevinin çalıştırılma sürümünü verir |
3 | nvokedFunctionArn Bu ARN ayrıntılarını verecektir. |
4 | memoryLimitInMB Bu, Lambda işlevi oluşturulurken eklenen bellek sınırını gösterir |
5 | awsRequestId Bu, AWS istek kimliğini verir. |
6 | logGroupName Bu, cloudwatch grup adını verecektir |
7 | logStreamName Bu, günlüklerin yazıldığı bulut izleme günlük akışı adını verecektir. |
8 | identity Bu, aws mobile sdk ile birlikte kullanıldığında amazon cognito kimlik sağlayıcısı hakkında ayrıntılı bilgi verecektir. Verilen detaylar aşağıdaki gibidir -
|
9 | clientContext Bu, aws mobile sdk ile kullanıldığında istemci uygulamasının ayrıntılarını verecektir. Verilen detaylar aşağıdaki gibidir -
|
Bağlam nesnesi hakkında daha iyi bir fikir edinmek için aşağıdaki örneğe bakın -
exports.handler = (event, context, callback) => {
// TODO implement
console.log('Remaining time =>', context.getRemainingTimeInMillis());
console.log('functionName =>', context.functionName);
console.log('AWSrequestID =>', context.awsRequestId);
console.log('logGroupName =>', context.log_group_name);
console.log('logStreamName =>', context.log_stream_name);
console.log('clientContext =>', context.clientContext);
callback(null, 'Name of aws Lambda is=>'+context.functionName);
};
Bu kodu AWS konsolunda test ettikten sonra aşağıdaki çıktıyı gözlemleyebilirsiniz -
Bu kodu AWS konsolunda test ettikten sonra aşağıdaki günlük çıktısını gözlemleyebilirsiniz:
NodeJS'de oturum açılıyor
NodeJS'de oturum açmak için console.log kullanabiliriz. Log detayları Lambda fonksiyonuna karşı CloudWatch servisinden alınabilir.
Daha iyi anlamak için aşağıdaki örneği inceleyin -
exports.handler = (event, context, callback) => {
// TODO implement
console.log('Logging for AWS Lamnda in NodeJS');
callback(null, 'Name of aws Lambda is=>'+context.functionName);
};
Bu kodu AWS konsolunda test ettikten sonra aşağıdaki çıktıyı gözlemleyebilirsiniz -
CloudWatch'tan aşağıdaki ekran görüntüsünü gözlemleyebilirsiniz -
NodeJS'de Hata İşleme
NodeJS'de hata bildiriminin nasıl yapıldığını anlayalım. Aşağıdaki kodu inceleyin -
exports.handler = function(event, context, callback) {
// This Source code only throws error.
var error = new Error("something is wrong");
callback(error);
};
Günlük çıktısında aşağıdakileri gözlemleyebilirsiniz -
Geri aramada hata ayrıntıları aşağıdaki şekilde verilmiştir -
{
"errorMessage": "something is wrong",
"errorType": "Error",
"stackTrace": [ "exports.handler (/var/task/index.js:2:17)" ]
}