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 -

  • identity.cognito_identity_id
  • identity.cognito_identity_pool_id
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 -

  • client_context.client.installation_id
  • client_context.client.app_title
  • client_context.client.app_version_name
  • client_context.client.app_version_code
  • client_context.client.app_package_name
  • client_context.custom - mobil istemci uygulamasından özel değerler içerir
  • client_context.env - AWS Mobile SDK'dan ortam ayrıntılarına sahiptir

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)"  ]
}