Introduction au Serverless et à AWS Lambda en C#
L'architecture serverless (informatique sans serveur) est un modèle de développement où le développeur se concentre exclusivement sur le code de la logique métier, tandis que l'infrastructure (serveurs, mise à l'échelle, surveillance) est gérée par le fournisseur cloud. AWS Lambda est l'un des services les plus populaires pour implémenter des fonctions serverless, et il prend parfaitement en charge l'écosystème .NET.
Dans cet article, nous allons parcourir le cycle complet de travail avec AWS Lambda en C# : de la création du projet au déploiement et au débogage. Vous apprendrez à configurer l'environnement, à écrire une fonction efficace, à traiter des événements et à éviter les erreurs courantes. Ce contenu est destiné aux développeurs C# qui souhaitent maîtriser l'approche serverless dans Amazon Web Services.
1. Configuration de l'environnement et création du premier projet
Installation des outils
Pour travailler avec AWS Lambda en C#, vous aurez besoin de :
- .NET SDK version 6.0 ou 8.0 (la dernière version LTS est recommandée).
- AWS CLI — interface en ligne de commande pour gérer les services AWS.
- Amazon.Lambda.Templates — ensemble de modèles pour .NET CLI.
- Docker Desktop (optionnel) — pour les tests locaux avec émulation Lambda.
Installez les modèles Lambda via le terminal :
dotnet new -i Amazon.Lambda.TemplatesCréation du projet
Créez une nouvelle fonction Lambda avec la commande :
dotnet new lambda.EmptyFunction -n MyFirstLambda -o ./MyFirstLambdacd MyFirstLambdaLa structure du projet inclut le fichier Function.cs avec la classe de base Function et une méthode de gestion. Par défaut, un modèle est utilisé pour une fonction simple qui prend une chaîne et retourne une chaîne.
Ouvrez Function.cs et modifiez-le comme suit :
using Amazon.Lambda.Core;using Amazon.Lambda.Serialization.SystemTextJson;
[assembly: LambdaSerializer(typeof(DefaultLambdaJsonSerializer))]
public class Function{ public string FunctionHandler(string input, ILambdaContext context) { context.Logger.LogInformation($"Entrée reçue : {input}"); return $"Bonjour, {input} ! Votre fonction a été exécutée avec succès."; }}Test local
Pour exécuter la fonction localement, utilisez l'utilitaire dotnet lambda invoke ou l'émulateur Lambda Runtime Interface Emulator (RIE) dans Docker. Exemple avec RIE :
docker run --rm -v "$PWD/bin/Release/net8.0/publish":/var/task:ro,delegated \ -p 9000:8080 \ public.ecr.aws/lambda/dotnet8:latest \ MyFirstLambda::MyFirstLambda.Function::FunctionHandlerEnvoyez une requête de test via curl :
curl -X POST "http://localhost:9000/2015-03-31/functions/function/invocations" \ -d '"Monde"'2. Traitement de différents types d'événements
Travailler avec API Gateway (requêtes HTTP)
Le plus souvent, Lambda est utilisé comme backend pour une API REST via Amazon API Gateway. Dans ce cas, le gestionnaire reçoit un objet APIGatewayProxyRequest et retourne un APIGatewayProxyResponse.
Installez le package NuGet :
dotnet add package Amazon.Lambda.APIGatewayEventsExemple de fonction de gestion de requête HTTP POST :
using Amazon.Lambda.APIGatewayEvents;using System.Text.Json;
public class Function{ public async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context) { context.Logger.LogInformation($"Requête reçue : {request.HttpMethod} {request.Path}");
// Analyse du corps de la requête var body = JsonSerializer.Deserialize<Dictionary<string, string>>(request.Body); var name = body?.GetValueOrDefault("name") ?? "Invité";
//