AWS Lambda - Fonction dans NODEJS

Nodejs est l'un des langages pris en charge par la fonction AWS Lambda. Les versions prises en charge avec nodejs sont v6.10 et v8.10. Dans ce chapitre, nous découvrirons en détail diverses fonctionnalités de la fonction AWS Lambda dans NODEJS.

Gestionnaire dans NodeJS

Pour écrire la fonction Lambda AWS dans nodejs, nous devons d'abord déclarer un gestionnaire. Le gestionnaire dans nodejs est le nom du fichier et le nom de la fonction d'exportation. Par exemple, le nom du fichier estindex.js et le nom de la fonction d'exportation est lambda handler, donc son gestionnaire correspondant est index.lambdahandler

Observez un exemple de gestionnaire montré ici -

exports.lambdahandler = function(event, context, callback) {   //code goes here}

Paramètres du gestionnaire

Le gestionnaire est le noyau principal de la création de la fonction Lambda. Le gestionnaire prend trois paramètres:event, context et callback.

Paramètre d'événement

Il contient tous les détails de l'événement déclenché. Par exemple, si nous utilisons la fonction Lambda pour être déclenchée sur S3, l'événement aura des détails sur l'objet S3.

Paramètre de contexte

Il contient les détails du contexte tels que les propriétés et les détails de configuration de la fonction Lambda.

Fonction de rappel

Cela aide à donner des détails à l'appelant. La structure du rappel se présente comme suit -

callback(error, result);

Les paramètres de la fonction de rappel sont expliqués ci-dessous -

Error −Cela aura des détails si une erreur s'est produite lors de l'exécution de la fonction Lambda. Si la fonction Lambda réussit,null peut être passé comme premier paramètre pour la fonction de rappel.

Result −Cela donnera les détails de l'exécution réussie de la fonction lambda. Si une erreur se produit, le paramètre de résultat est ignoré.

Note −Il n'est pas obligatoire d'utiliser la fonction de rappel dans AWS Lambda. Dans le cas où il n'y a pas de fonction de rappel, le gestionnaire le renverra comme nul.

Les signatures de rappel valides sont données ci-dessous -

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

Chaque fois qu'AWS Lambda est exécuté, les détails du rappel, tels que l'erreur ou le succès, sont consignés dans AWS CloudWatch avec les messages de la console, le cas échéant.

Utilisation d'AWS Lambda dans Nodejs8.10

Comprenons comment travailler avec AWS Lambda dans nodejs8.10 et invoquons la fonction de manière synchrone et asynchrone.

Appel de la fonction Lambda de manière synchrone

L'exemple suivant vous donne une idée de l'appel de la fonction Lambda de manière synchrone -

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);
};

Vous pouvez observer la sortie suivante après avoir testé ce code dans la console AWS -

Notez que la sortie du code ci-dessus est un objet de promesse. Il ne donne pas le décompte, car le décompte est incrémenté dans un setTimeout et l'appel de fonction n'attend pas l'exécution à l'intérieur de setTimeout et retourne l'objet de promesse.

Si nous avions async/await sur la fonction de gestionnaire obtiendra la sortie exacte de la fonction lambda.

Invocation du gestionnaire de manière asynchrone

L'exemple suivant vous donne une idée de l'appel de la fonction Lambda de manière asynchrone -

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);
};

Nous avons ajouté async et awaitdans le code ci-dessus. Quand nous utilisonsawaità côté de l'appel de fonction, l'exécution s'arrête jusqu'à ce que la promesse à l'intérieur de la fonction soit résolue. Notez queawait est valable uniquement pour async les fonctions.

Vous pouvez observer la sortie suivante après avoir testé ce code dans la console AWS -

ContextDetails dans NodeJS

L'objet de contexte donne des détails tels que le nom de la fonction Lambda, le temps restant en millisecondes, l'ID de la demande, le nom du groupe cloudwatch, les détails du délai d'expiration, etc.

Les tableaux suivants présentent la liste des méthodes et attributs disponibles avec l'objet de contexte -

Méthode disponible pour l'objet de contexte

Sr. Non Nom et description de la méthode
1

getRemainingTimeInMillis()

Cette méthode donne le temps restant en millisecondes jusqu'à ce que la fonction Lambda termine la fonction

Attributs disponibles pour l'objet de contexte

Sr. Non Nom et description de l'attribut
1

functionName

Cela donne le nom de la fonction AWS Lambda

2

functionVersion

Cela donne la version de la fonction AWS Lambda en cours d'exécution

3

nvokedFunctionArn

Cela donnera les détails de l'ARN.

4

memoryLimitInMB

Cela montre la limite de mémoire ajoutée lors de la création de la fonction Lambda

5

awsRequestId

Cela donne l'ID de demande AWS.

6

logGroupName

Cela donnera le nom du nom du groupe cloudwatch

sept

logStreamName

Cela donnera le nom du nom du flux de journal cloudwatch où les journaux sont écrits.

8

identity

Cela donnera des détails sur le fournisseur d'identité amazon cognito lorsqu'il est utilisé avec aws mobile sdk.

Les détails donnés sont les suivants -

  • identity.cognito_identity_id
  • identity.cognito_identity_pool_id
9

clientContext

Cela détaille l'application client lorsqu'elle est utilisée avec aws mobile sdk. Les détails donnés sont les suivants -

  • 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 - il a dict des valeurs personnalisées de l'application client mobile
  • client_context.env - il contient les détails de l'environnement du kit SDK AWS Mobile

Regardez l'exemple suivant pour avoir une meilleure idée de l'objet de contexte -

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);
};

Vous pouvez observer la sortie suivante après avoir testé ce code dans la console AWS -

Vous pouvez observer la sortie de journal suivante après avoir testé ce code dans la console AWS -

Connexion à NodeJS

Nous pouvons utiliser console.log pour la journalisation dans NodeJS.Les détails du journal peuvent être récupérés à partir du service CloudWatch par rapport à la fonction Lambda.

Observez l'exemple suivant pour une meilleure compréhension -

exports.handler = (event, context, callback) => {
   // TODO implement
   console.log('Logging for AWS Lamnda in NodeJS');
   callback(null, 'Name of aws Lambda is=>'+context.functionName);
};

Vous pouvez observer la sortie suivante après avoir testé ce code dans la console AWS -

Vous pouvez observer la capture d'écran suivante de CloudWatch -

Gestion des erreurs dans NodeJS

Voyons comment la notification d'erreur est effectuée dans NodeJS. Respectez le code suivant -

exports.handler = function(event, context, callback) {
   // This Source code only throws error. 
   var error = new Error("something is wrong");
   callback(error);   
};

Vous pouvez observer ce qui suit dans la sortie du journal -

Les détails de l'erreur sont donnés dans le rappel comme suit -

{
   "errorMessage": "something is wrong",
   "errorType": "Error",
   "stackTrace": [    "exports.handler (/var/task/index.js:2:17)"  ]
}