Charges de travail .NET sur AWS Lambda

MODULE 1

Module 1 : Présentation d'AWS Lambda

 MODULE D'APPRENTISSAGE

Présentation

Dans ce didacticiel, vous allez apprendre à utiliser .NET avec AWS Lambda. Aucune connaissance préalable d'AWS Lambda n'est supposée, mais vous devez être familiarisé avec AWS et .NET. Lors de ce cours, vous apprendrez à créer, déployer, exécuter, tester et déboguer des fonctions .NET Lambda à l'aide de la ligne de commande, de Visual Studio, de Visual Studio Code et de Rider.

Dans ce module d'introduction, vous découvrirez ce qu'est l'informatique sans serveur, ses avantages et son lien avec AWS Lambda. Suivent deux exemples montrant à quel point il est facile de démarrer avec les fonctions .NET AWS Lambda.

 Durée

45 minutes

Calcul sans serveur

Avant de parler de l'informatique sans serveur, abordons un instant l'informatique traditionnelle.

De nombreuses entreprises, petites et grandes, utilisent des serveurs sur site ou des serveurs basés sur des centres de données pour exécuter leurs applications. Lorsque ces entreprises ont besoin de plus de serveurs, elles doivent les acheter, les installer physiquement, les configurer, les sécuriser et les entretenir. (Dans certains cas, un centre de données peut se charger de les installer physiquement en votre nom, mais vous devez tout de même faire le reste.)

Lorsque tout cela est fait, l'entreprise peut déployer ses applications sur ces serveurs. Pour de nombreuses entreprises, cela peut prendre des semaines, voire des mois. Ces retards ont toujours rendu difficile la mise à l'échelle des applications.

Le cloud computing a largement facilité cette tâche. Une entreprise peut lancer une instance d'un serveur (ou plusieurs instances) en quelques minutes. L'entreprise peut créer ses propres images de machine en configurant la machine virtuelle et le système d'exploitation comme elle le souhaite. Cela réduit la quantité de configuration requise une fois le serveur lancé, mais ils doivent tout de même maintenir le serveur à jour avec des correctifs, des mises à jour de sécurité et des mises à jour logicielles, etc.

Dans de nombreux cas, ces serveurs fonctionnent 24 heures sur 24, 7 jours sur 7, même s'ils ne sont pas utilisés pendant tout ce temps. Les serveurs sont souvent provisionnés pour gérer le pic de charge de travail attendu par l'application. Mais en dehors de ce pic, les serveurs sont au moins partiellement inactifs. Des politiques de dimensionnement appropriées peuvent être utilisées pour réduire l'aide apportée à ce problème, mais cela peut être difficile à mettre en œuvre.

En outre, le travail de provisionnement et de maintenance des serveurs, ainsi que le temps qu'ils passent inactifs, entraînent des coûts qui ne profitent pas directement à l'entreprise.
Une alternative à cela est l'informatique sans serveur. Il n'y a pas de serveurs, il n'y a pas de maintenance et la mise à l'échelle est prise en charge pour vous. Vous rédigez votre code, vous le déployez et vous laissez AWS gérer l'infrastructure pour vous.

AWS propose deux options pour l'informatique sans serveur : AWS Fargate pour les applications basées sur des conteneurs et AWS Lambda pour les applications pilotées par des événements.

AWS Lambda

AWS Lambda est un service de calcul sans serveur qui exécute votre code en réponse aux événements reçus par le service. Les événements peuvent être générés par d'autres services AWS, tels que SNS, SQS, S3, DynamoDB, API Gateway, etc.

L'utilisation d'un API Gateway, ou d'URL de fonction Lambda vous permet de déclencher l'exécution d'une fonction Lambda en réponse à une requête HTTP. Les fonctions Lambda peuvent également être invoquées directement, bien que cela soit également considéré comme un événement.

Vous n'avez pas besoin de provisionner d'infrastructure pour utiliser AWS Lambda. AWS se charge également de la mise à l'échelle automatique pour répondre aux besoins de votre application, qu'il s'agisse de quelques exécutions par jour ou de dizaines de milliers par seconde. L'infrastructure Lambda, gérée par AWS, est hautement disponible et tolérante aux pannes.

Avec les fonctions Lambda, vous ne payez que pour les ressources de calcul que vous utilisez. Lorsque votre code n'est pas exécuté, vous ne payez pas.

Vous écrivez vos applications .NET à l'aide des IDE que vous connaissez déjà, puis à l'aide des outils AWS (ou d'un IaC de votre choix), vous déployez votre application sur AWS Lambda.

Lorsqu'une fonction Lambda est invoquée par un événement, un environnement d'exécution est créé, votre code d'initialisation est exécuté (constructeurs, etc.), puis votre code pour gérer l'événement est exécuté.

Une fois l'exécution terminée, l'environnement d'exécution reste disponible pour être réutilisé pendant une période non déterministe.

Si un autre événement arrive, le même environnement d'exécution est utilisé et le code d'initialisation n'est pas réexécuté.

Si aucun environnement d'exécution n'est disponible, un nouvel environnement est créé et le code d'initialisation est de nouveau exécuté.

Les fonctions AWS Lambda fournissent actuellement des environnements d'exécution gérés pour .NET Core 3.1 et .NET 6. Si vous souhaitez écrire des applications dans d'autres versions de .NET, vous pouvez utiliser des environnements d'exécution personnalisés Lambda ou une version basée sur un conteneur de votre application.

AWS fournit des modèles de projet C# et F# pour les fonctions Lambda. Ils peuvent être utilisés à partir de la ligne de commande, de Visual Studio, de Visual Studio Code et de Rider.

Vous pouvez exécuter votre fonction .NET Lambda sur des processeurs x86_64 et arm64. Le choix de l'architecture du processeur n'a aucune incidence sur la façon dont vous écrivez vos applications. Le déploiement sur le processeur de votre choix se fait simplement en modifiant un seul paramètre de configuration.

Principales fonctionnalités d'AWS Lambda

Vous n'avez pas besoin d'apprendre un nouveau langage. Utilisez vos connaissances actuelles en C# et F# pour écrire vos fonctions Lambda.

Vous pouvez utiliser les fonctions Lambda avec d'autres services AWS, tels que SNS, SQS, S3, Step Functions et DynamoDB, pour créer des applications pilotées par des événements. Ou effectuez des tâches personnalisées en réponse à des événements provenant de ces services.

Si vous devez orchestrer l'exécution de plusieurs fonctions Lambda, vous pouvez utiliser AWS Step Functions. Avec Step Functions, vous créez une machine à états qui gère l'exécution de vos fonctions Lambda.

Vous n'avez pas besoin de prévoir ni de gérer une infrastructure dédiée. AWS s'occupe de tout cela pour vous. Il vous suffit de décider de l'architecture du processeur et de la quantité de mémoire à allouer à la fonction. En fonction de votre choix de mémoire, AWS choisira la vitesse du processeur, la bande passante du réseau et les E/S disque appropriées.

Vos fonctions Lambda sont hautement disponibles et tolérantes aux pannes, et s'exécutent dans plusieurs zones de disponibilité de chaque région.

Les fonctions AWS Lambda démarrent quelques millisecondes après l'arrivée d'un événement et peuvent évoluer rapidement et automatiquement en fonction du volume d'événements entrants.

Vous ne payez que ce que vous consommez, et cela est facturé à la milliseconde d'utilisation.

Lambda propose un niveau généreux et toujours gratuit, qui vous permet d'exécuter un million de requêtes gratuites par mois et de consacrer 400 000 Go-secondes de temps de calcul par mois

Si vous avez des modèles de trafic en rafale, Lambda s'adapte à ces besoins, et lorsque le trafic diminue, vous ne payez pas pour les ressources dont vous n'avez plus besoin.

Lambda fait partie des Compute Savings Plans, qui proposent des prix plus bas en échange d'un engagement à utiliser un certain temps de calcul sur une période d'un à trois ans.

Dans la section suivante, vous découvrirez à quel point il est facile de démarrer avec AWS Lambda. En quelques minutes de travail, vous disposerez de deux fonctions .NET AWS Lambda exécutées dans le cloud

Deux exemples de la facilité avec laquelle il est possible de démarrer avec les fonctions .NET AWS Lambda

Durée estimée : 30 minutes

Veuillez noter que vous pouvez suivre les exemples présentés ici, mais ce n'est pas obligatoire.

Si vous n'avez jamais travaillé avec la technologie sans serveur, cela peut sembler intimidant au premier abord. Même savoir par où commencer peut être difficile à comprendre.

À la fin de ce court module, deux fonctions .NET Lambda seront opérationnelles sur AWS.

L'un est invoqué depuis la ligne de commande, l'autre via un point de terminaison HTTPS public que vous configurerez pratiquement sans effort.

Vous utiliserez la ligne de commande pour créer, construire et déployer les deux exemples.

Conditions préalables

1. Un compte AWS.

Si vous n'avez pas de compte AWS, consultez cette page sur la création et l'activation d'un compte. Lorsque vous créez un nouveau compte, un niveau gratuit est automatiquement activé pour vous. Le niveau gratuit permet d'utiliser gratuitement certains services AWS dans la limite d'une limite. En savoir plus sur le niveau gratuit ici.

2. Une AWS CLI installée et configurée.

Si vous ne possédez pas l'AWS CLI, téléchargez-la et installez-la. Configurez ensuite l'AWS CLI avec vos informations d'identification et votre région par défaut. Le choix de la région par défaut dépendra de votre situation géographique et des services AWS que vous souhaitez utiliser. La disponibilité des services varie selon les régions.

La politique d'accès de l'administrateur doit être jointe à l'utilisateur AWS. Consultez la section « Remarque sur les autorisations » du module 3 pour plus de détails.

3. Le .NET 6 SDK

Si le .NET 6 SDK n'est pas installé, téléchargez-le et installez-le.

Téléchargez les outils et les modèles

Un module ultérieur expliquera plus en détail les outils et les modèles disponibles, mais pour l'instant, vous pouvez commencer en exécutant les deux commandes ci-dessous :

dotnet tool install -g Amazon.Lambda.Tools
dotnet new -i Amazon.Lambda.Templates

Démo 1 : Le « Hello World ! » des fonctions Lambda

Il s'agit de la fonction Lambda la plus basique que vous puissiez écrire. Elle nécessite quelques entrées et renvoie une réponse. Elle sera opérationnelle en quelques minutes.

Étape 1 – Création d'un projet .NET

À partir de la ligne de commande/du terminal, exécutez la commande suivante pour créer une nouvelle fonction Lambda.

dotnet new lambda.EmptyFunction -n HelloLambda

Étape 2 – Déploiement de la fonction Lambda

Accédez au répertoire HelloLambda/src/HelloLambda :

cd HelloLambda/src/HelloLambda

Si cela vous intéresse, ouvrez le projet dans ce répertoire. Vous verrez un fichier nommé Function.cs. C'est là que se trouve le code qui exécute votre fonction. Ne modifiez rien dans le fichier pour l'instant.

À partir de la ligne de commande, exécutez la commande suivante pour déployer votre fonction :

dotnet lambda deploy-function --function-name HelloLambda

Vous verrez une sortie qui ressemble à celle ci-dessous.

Le AWS Toolkit pour Visual studio ne permet pas d'utiliser votre registre public ECR ni d'activer des fonctionnalités telles que l'analyse automatique et le chiffrement des référentiels pour les nouveaux référentiels de votre registre privé. Si ces fonctionnalités sont requises, créez des référentiels à l'aide de la console de gestion AWS ou d'outils de ligne de commande tels que l'AWS CLI et les outils AWS pour PowerShell.

À ce stade, l'une des deux choses suivantes se produira.

  1. S'il n'y a aucun rôle dans votre compte AWS, il vous sera demandé de « saisir le nom du nouveau rôle IAM ». Utilisez le nom HelloLambdaRole.
  2. S'il existe des rôles dans votre compte AWS, une liste s'affichera, mais en bas de la page Créer un nouveau rôle IAM, saisissez le numéro qui lui est associé. Ensuite, il vous sera demandé de « saisir le nom du nouveau rôle IAM ». Utilisez le nom HelloLambdaRole.

Vous verrez ensuite la liste des autorisations qui peuvent être associées au rôle que vous créez. Choisissez AWSLambdaBasicExecutionRole. C'est le numéro 6 sur ma liste.

Patientez quelques secondes pendant que le rôle, les autorisations et la fonction Lambda sont créés.

Étape 3 – Invoquer la fonction Lambda

À partir de la ligne de commande, exécutez :

dotnet lambda invoke-function --function-name HelloLambda --payload "Hello World!" 

Dans la sortie, vous verrez :

Et voilà ! Vous venez de déployer une fonction Lambda dans le cloud !

Étape 4 – nettoyage

Avec les fonctions Lambda, vous n'êtes pas facturé lorsqu'elles ne sont pas exécutées, mais avec d'autres services AWS, vous serez facturé même lorsque le service est inactif. Il est toujours recommandé de supprimer les ressources que vous n'utilisez pas.

Exécutez la commande suivante pour créer une fonction Lambda :

dotnet lambda delete-function --function-name HelloLambda 

Notez que cela ne supprime pas le rôle que vous avez créé, mais uniquement la fonction.

Démo 2 : Une API .NET exécutée dans une fonction Lambda

Dans cette démonstration, vous allez créer une application API .NET qui gère les requêtes HTTPS. Vous pouvez utiliser le nouveau modèle d'API minimal ou l'ancien modèle d'API complet avec contrôleurs. Les étapes seront les mêmes. Si vous connaissez les instructions de haut niveau et les points de terminaison d'API .NET 6, pensez à utiliser le modèle minimal Serverless.AspNetCoreMinimalAPI. Si vous n'êtes pas familier avec les instructions de haut niveau, utilisez l'ancien modèle, Serverless.AspNetCoreWebAPI.

Étape 1 – Création d'un projet .NET

Si vous souhaitez utiliser le modèle d'API minimal, exécutez la commande suivante :

dotnet new serverless.AspNetCoreMinimalAPI -n HelloLambdaAPI

Si vous connaissez mieux le modèle d'API complet avec contrôleurs, exécutez la commande suivante :

dotnet new serverless.AspNetCoreWebAPI -n HelloLambdaAPI

Étape 2 – créer un compartiment S3

Il s'agit d'une étape ponctuelle. La commande de l'étape 3 nécessite un compartiment S3 pour stocker les fichiers liés au déploiement.

Vous devez créer un nom de compartiment unique, pour tous les comptes AWS (pas uniquement le vôtre) et pour toutes les régions.

Si vous utilisez us-east-1, exécutez la commande suivante :

aws s3api create-bucket --bucket your-unique-bucket-name1234 

Si vous souhaitez utiliser une autre région, exécutez :

aws s3api create-bucket --bucket your-unique-bucket-name1234 --create-bucket-configuration LocationConstraint=REGION

Si le nom du compartiment que vous avez sélectionné est en cours d'utilisation, le message d'erreur suivant s'affichera :

Une erreur s'est produite (BucketAlreadyExists) lors de l'appel de l'opération CreateBucket : le nom de compartiment demandé n'est pas disponible. L'espace de nom du compartiment est partagé par tous les utilisateurs du système. Choisissez un nom différent et essayez à nouveau.

Étape 3 – Déploiement de la fonction Lambda

Accédez au répertoire HelloLambdaAPI/src/HelloLambdaAPI.

À partir de la ligne de commande, exécutez la commande suivante pour déployer votre fonction :

dotnet lambda deploy-serverless --stack-name HelloLambdaAPI --s3-bucket your-unique-bucket-name1234

Asseyez-vous et attendez...

Vous verrez des résultats liés au processus de création et de déploiement, et à la fin, il y aura un lien :

Output Name                    Value
------------------------------ --------------------------------------------------
ApiURL                         https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/Prod/

Ouvrez-le dans un navigateur. Selon le modèle de projet que vous avez choisi, l'un des messages ci-dessous s'affichera :

Étape 4 – nettoyage

Pour supprimer la fonction Lambda et les ressources associées, exécutez la commande suivante :

dotnet lambda delete-serverless HelloLambdaAPI

Conclusion

Et voilà. En quelques minutes, vous avez déployé deux fonctions Lambda. C'est aussi simple que cela de démarrer avec les fonctions .NET Lambda !

Cette page vous a-t-elle été utile ?

OUTILS POUR LE DÉVELOPPEMENT .NET