Premiers pas avec .NET avec les fonctions AWS Lambda
AWS Lambda Functions est un modèle informatique sans serveur qui vous permet d’exécuter du code sans serveurs. Ils sont généralement écrits dans des langages tels que JavaScript et Python, mais AWS prend désormais en charge de nombreux runtimes différents, y compris. NET pour C#.
Pourquoi utiliser. NET pour Lambda ?
Il existe maintenant de nombreuses langues différentes pour Lambda, vous avez donc de nombreuses options. En règle générale, JavaScript et Python sont utilisés pour des fonctions d’automatisation simples qui se chargent d’être rapidement opérationnelles. Mais ils ne sont pas les plus performants pour les traitements lourds, et les langages de script typés dynamiquement sont un sérieux inconvénient pour les applications complexes.
Si vous préférez le langage C#, l’utiliser pour Lambda n’a pas trop d’inconvénients, surtout si le passage à Python ou JavaScript est trop fastidieux. Les outils fournis par AWS sont également bons et vous avez accès à l’ensemble du SDK AWS, ce qui signifie que vous pouvez facilement rechercher des services comme Lambda et DynamoDB.
De plus, AWS prend en charge l’intégralité de l’exécution. NET, ce qui signifie que vous pouvez également utiliser des langages autres que C# qui se compilent en binaires. RAPPORTER. C# est le plus populaire, mais vous pouvez également écrire des fonctions lambda en F# ou VB.NET .
Comment ça fonctionne?
Des langages comme Java et C# ont tendance à être beaucoup plus agréables, mais il y a des inconvénients à les utiliser. Les deux sont compilés en bytecode qui doit être compilé au démarrage, ils ont donc plus de temps de démarrage, en particulier au démarrage à froid. Un « démarrage à froid » se produit lorsqu’AWS n’a pas exécuté une fonctionnalité au cours des dernières minutes, de sorte qu’elle ne sera pas mise en cache et qu’elle devra se compiler juste à temps pour l’exécuter. Ce processus peut faire en sorte que vos fonctions mettent une seconde ou plus à répondre, ce qui n’est pas bon pour les applications Web.
Cependant, ce problème est grandement atténué si vous utilisez Lambda très souvent. Vous pouvez également réduire complètement les temps de démarrage à froid grâce au parallélisme dédié . Temps de réponse typique pour. NET est très volumineux et ses performances sont comparables à celles de langages entièrement compilés tels que Go et Rust.
Si vous utilisez actuellement Java pour les fonctions Lambda, C# pourrait être un remplacement viable car il s’agit d’un environnement d’exécution moderne. NET 6 utilise moins de mémoire et, dans la plupart des cas, démarre plus rapidement que la JVM.
Configuration des fonctions lambda C#
Tout d’abord, vous en aurez besoin d’un installé. RAPPORTER. AWS prend en charge. NET Core 3.1 et. NET 6, donc l’un ou l’autre de ces deux environnements d’exécution fonctionnera, mais surtout, vous aurez besoin dotnet
de l’interface de ligne de commande installée pour pouvoir installer les modèles Lambda. Vous pouvez obtenir. NET à partir du portail de documentation Microsoft .
Vous devrez installer des modèles Lambda et des outils Lambda globaux.
dotnet new -i Amazon.Lambda.Templates
dotnet tool install -g Amazon.Lambda.Tools
Cela met en place beaucoup d’options; vous pouvez tous les lister avec :
dotnet new --list
Cet outil est très pratique car il est livré avec de nombreux modèles préconfigurés pour différents cas d’utilisation. En règle générale, vous aurez besoin d’une fonction par projet pour limiter les tailles de build, mais vous pouvez avoir plusieurs fonctions dans une seule DLL si vous utilisez des modèles sans serveur AWS déployés à l’aide de modèles CloudFormation. Ils sont beaucoup plus difficiles à gérer, alors ne les utilisez que s’ils vous profitent.
Cependant avec des fichiers de solution. NET, vous pouvez avoir plusieurs projets parallèles référençant des assemblys partagés, ce n’est donc pas un gros problème.
Pour l’instant, nous allons utiliser un simple modèle « Fonction vide » qui crée un projet à l’aide de. NET 6. Vous pouvez le créer depuis la ligne de commande ou depuis le nouvel écran de projet de votre éditeur.
dotnet new lambda.EmptyFunction --name SimpleLambdaFunction --profile default --region us-east-1
Cela génère une fonction très simple – elle prend une chaîne en entrée et passe également ILambdaContext
. Il Main()
s’agit de la fonction de point d’entrée pour votre Lambda et elle sera appelée par le runtime chaque fois que la fonction Lambda est appelée. Cette fonction particulière renvoie string
, mais vous pouvez également le faire async
et revenir Task<string?>
.
En haut, vous verrez un attribut d’assembly qui configure le sérialiseur JSON. En interne, Lambda désérialisera le contenu d’entrée pour vous, puis appellera votre fonction. Par la suite, s’il renvoie quelque chose, il sera écrit dans le flux de réponse. Les bibliothèques Lambda gèrent ce modèle pour vous, et le code qui encapsule votre fonction se trouve dans le fichier HandlerWrapper
.
Fondamentalement, il gérera toutes sortes de signatures de méthode, et si votre fonction prend une entrée, elle désérialisera ces entrées pour vous. Si votre fonction renvoie une sortie, elle sérialisera cette sortie pour vous. Vous n’avez pas vraiment besoin de faire tout cela puisque vous pouvez écrire des fonctions qui fonctionnent sur des Stream
classes brutes, mais c’est une belle classe wrapper pour faciliter les choses.
Cela signifie que vous êtes libre de définir vos propres modèles pour les entrées et les sorties transmises vers et depuis la fonction, ce qui est l’un des avantages intéressants du traitement JSON avec C#.
Dans cette fonction, il désérialise InputModel
la classe, attend de manière asynchrone une seconde, puis renvoie OutputModel
la classe. Cette classe est sérialisée dans le flux de sortie afin que Lambda puisse la traiter.
Exécution des fonctions lambda
L’exécution d’une fonction après l’avoir créée est assez simple grâce à l’interface de ligne de commande Lambda. NET fournit une méthode pour le déployer. Cours juste deploy-function
avec
dotnet lambda deploy-function SimpleNETFunction
Vous devrez sélectionner un rôle IAM ou en créer un nouveau, et vous devrez peut-être ajouter des autorisations à ce nouveau rôle. Vous devriez maintenant voir la fonction dans la console :
Lambda fournit un testeur intégré auquel vous pouvez transmettre JSON.
Cela s’exécutera et vous montrera tous les détails de l’exécution. Dans ce cas, avec une très petite fonction minimale, le temps de démarrage à froid était inférieur à 500 ms, ce qui est tout à fait correct. NET et pour Lambda en général. Dès qu’il fait chaud, la durée payante est réduite à quelques millisecondes.
Dans ce cas, la fonction n’a pas du tout utilisé beaucoup de mémoire et la réduction de la fonction à 128 Mo n’a posé aucun problème.
Laisser un commentaire