AWS Lambda - Fonction en C #

Ce chapitre vous explique comment travailler avec la fonction AWS Lambda en C # en détail. Ici, nous allons utiliser Visual Studio pour écrire et déployer le code sur AWS Lambda. Pour toute information et aide concernant l'installation de Visual studio et l'ajout de la boîte à outils AWS à Visual Studio, veuillez consulter leIntroductionchapitre de ce tutoriel. Une fois que vous avez terminé l'installation de Visual Studio, veuillez suivre les étapes ci-dessous. Reportez-vous aux captures d'écran respectives pour une meilleure compréhension -

Étape 1

Ouvrez votre Visual Studio et suivez les étapes pour créer un nouveau projet. Cliquer surFile -> New -> Project.

Étape 2

Maintenant, l'écran suivant s'affiche dans lequel vous sélectionnez AWS Lambda for Visual C#. SélectionnerAWS Lambda Project (.NET Core).

Vous pouvez changer le nom si nécessaire, gardera ici le nom par défaut. Cliquez surOK continuer.

L'étape suivante vous demandera de sélectionner un Blueprint.

Sélectionner Empty function pour cet exemple et cliquez sur Finish. Cela créera une nouvelle structure de projet comme indiqué ci-dessous -

Maintenant, sélectionnez Function.cs qui est le fichier principal dans lequel le gestionnaire avec l'événement et le contexte est créé pour AWS Lambda.

L'affichage du fichier Functions.cs est le suivant -

Vous pouvez utiliser la commande ci-dessous pour sérialiser les paramètres d'entrée et de sortie dans la fonction AWS Lambda.

[assembly: 
LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]

Détails du gestionnaire pour C #

Le gestionnaire s'affiche comme suit -

public string FunctionHandler(string input, ILambdaContext context) {
   return input?.ToUpper();
}

Les divers composants du code ci-dessus sont expliqués ci-dessous -

FunctionHandler −Il s'agit du point de départ de la fonction C # AWS Lambda.

String input − Les paramètres du gestionnaire string input contient toutes les données d'événement telles que l'objet S3, les détails de la passerelle API, etc.

ILambdaContext context −ILamdaContext est une interface qui a des détails de contexte. Il contient des détails tels que le nom de la fonction lambda, les détails de la mémoire, les détails du délai d'expiration, etc.

Le gestionnaire Lambda peut être appelé de manière synchrone et asynchrone. S'il est appelé de manière synchrone comme indiqué ci-dessus, vous pouvez avoir le type de retour. Si asynchrone, le type de retour doit être nul.

Maintenant, déployons AWS Lambda C # et testons la même chose. Faites un clic droit sur le projet et cliquezPublish to AWS Lambda comme indiqué ci-dessous -

Remplissez le Function Name et cliquez sur Next. L'écran suivant affiché est leAdvanced Function Details comme indiqué -

Entrer le Role Name, Memory et Timeout. Veuillez noter qu'ici, nous avons sélectionné le rôle existant créé et utilisé la mémoire comme 128 Mo et le délai d'expiration de 10 secondes. Une fois terminé, cliquezUpload pour publier sur la console AWS Lambda.

Vous pouvez voir l'écran suivant une fois la fonction AWS Lambda téléchargée. Cliquez surInvokepour exécuter la fonction AWS Lambda créée. À l'heure actuelle, il affiche une erreur car il a besoin d'une entrée selon le code écrit.

Maintenant, laissez-nous entrer un échantillon d'entrée et Invokeà nouveau. Notez qu'ici nous avons entré du texte dans la zone de saisie et la même chose en cliquantinvokes'affiche en majuscules dans la section des réponses. La sortie du journal est affichée ci-dessous -

Maintenant, vérifions également la console AWS pour voir si la fonction est créée lorsque nous avons déployé la fonction à partir de Visual Studio.

La fonction Lambda créée ci-dessus est aws lambda using csharp et la même chose est affichée dans la console AWS, comme indiqué dans les captures d'écran ci-dessous -

Signature du gestionnaire

Le gestionnaire est le point de départ pour qu'AWS s'exécute. Le nom du gestionnaire doit être défini comme -

ASSEMBLY::TYPE::METHOD

Les détails de la signature sont expliqués ci-dessous -

ASSEMBLY- Il s'agit du nom de l'assembly .NET de l'application créée. Il s'agit essentiellement du nom du dossier à partir duquel le projet est créé.

TYPE- C'est le nom du gestionnaire. Il s'agit essentiellement du namespace.classname.

METHOD - C'est le nom du gestionnaire de fonctions.

Le code de la signature du gestionnaire est comme indiqué ci-dessous -

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;

// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]

namespace AWSLambda3 {
   public class Function {

      /// <summary>
      /// A simple function that takes a string and does a ToUpper
      /// </summary>
      /// <param name="input"></param>
      /// <param name="context"></param>
      /// <returns></returns>
      public string FunctionHandler(string input, ILambdaContext context) {
         return input?.ToUpper();
      }
   }
}

Notez qu'ici l'assemblage est AWSLamda3, Le type est namespace.classname qui est AWSLambda3.Function et la méthode est FunctionHandler. Ainsi, la signature du gestionnaire estAWSLamda3::AWSLambda3.Function::FunctionHandler

Objet de contexte en C #

L'objet de contexte fournit des informations utiles sur le runtime dans l'environnement AWS. Les propriétés disponibles dans l'objet de contexte sont comme indiqué dans le tableau suivant -

Sr. Non Propriétés et description
1

MemoryLimitInMB

Cela donnera des détails sur la mémoire configurée pour la fonction AWS Lambda

2

FunctionName

Nom de la fonction AWS Lambda

3

FunctionVersion

Version de la fonction AWS Lambda

4

InvokedFunctionArn

ARN utilisé pour appeler cette fonction.

5

AwsRequestId

ID de demande AWS pour la fonction AWS créée

6

LogStreamName

Nom du flux de journal Cloudwatch

sept

LogGroupName

Nom du groupe Cloudwatch

8

ClientContext

Informations sur l'application client et l'appareil lorsqu'ils sont utilisés avec AWS Mobile SDK

9

Identity

Informations sur l'identité amazon cogbnito lorsqu'elle est utilisée avec AWS Mobile SDK

dix

RemainingTime

Temps d'exécution restant jusqu'à la fin de la fonction

11

Logger

Le logger associé au contexte

Exemple

Dans cette section, testons certaines des propriétés ci-dessus dans AWS Lambda en C #. Observez l'exemple de code ci-dessous -

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Amazon.Lambda.Core;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]

namespace AWSLambda6 {
   public class Function {

      /// <summary>
      /// </summary>
      /// <param name="input"></param>
      /// <param name="context"></param>
      /// <returns></returns>
      public void FunctionHandler(ILambdaContext context) {
         LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
         context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
         LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");            
      }
   }
}

La sortie associée que vous pouvez observer lorsque vous appelez le code ci-dessus dans C# est comme indiqué ci-dessous -

La sortie associée que vous pouvez observer lorsque vous appelez le code ci-dessus dans AWS Console est comme indiqué ci-dessous -

Journalisation à l'aide de C #

Pour la journalisation, vous pouvez utiliser deux fonctions -

  • context.Logger.Log

  • LambdaLogger.Log

Observez l'exemple suivant montré ici -

public void FunctionHandler(ILambdaContext context) {
   LambdaLogger.Log("Function name: " + context.FunctionName+"\n");
   context.Logger.Log("RemainingTime: " + context.RemainingTime+"\n");
   LambdaLogger.Log("LogGroupName: " + context.LogGroupName+"\n");            
}

La sortie correspondante pour le code donné ci-dessus est affichée ici -

Vous pouvez obtenir les journaux de CloudWatch comme indiqué ci-dessous -

Gestion des erreurs en C # pour la fonction Lambda

Cette section traite de la gestion des erreurs en C #. Pour la gestion des erreurs,Exception la classe doit être étendue comme indiqué dans l'exemple ci-dessous -

exemple

namespace example {            
   public class AccountAlreadyExistsException : Exception {
      public AccountAlreadyExistsException(String message) :
         base(message) {
      }
   }
} 
namespace example {
   public class Handler {
     public static void CreateAccount() {
       throw new AccountAlreadyExistsException("Error in AWS Lambda!");
     }
   }
}

La sortie correspondante pour le code donné ci-dessus est comme indiqué ci-dessous -

{
   "errorType": "LambdaException",
   "errorMessage": "Error in AWS Lambda!"
}