Introduction : Pourquoi Serverless et C# forment le duo idéal
\nL'architecture Serverless (ou calcul sans serveur) est un modèle où vous écrivez du code sans vous soucier de la gestion des serveurs. AWS Lambda est l'un des services les plus populaires pour exécuter ce type de code. Associé à C# (.NET), vous obtenez un outil puissant, typé et performant pour créer des microservices, des gestionnaires d'API et des tâches en arrière-plan.
\nDans cet article, nous allons parcourir l'ensemble du processus : de la configuration de l'environnement au déploiement et à la surveillance de votre première fonction C# sur AWS Lambda. Ce contenu convient aussi bien aux débutants qu'aux développeurs expérimentés souhaitant structurer leurs connaissances.
\n\n1. Préparation de l'environnement et création du projet
\n1.1 Installation des outils
\nPour travailler avec C# et AWS Lambda, vous aurez besoin de :
\n- \n
- .NET SDK (8.0 ou 6.0) — à télécharger sur dotnet.microsoft.com ; \n
- AWS CLI — pour gérer les ressources depuis le terminal ; \n
- Amazon.Lambda.Tools — un outil global .NET pour le déploiement. \n
Installez Lambda Tools avec une seule commande :
\ndotnet tool install -g Amazon.Lambda.Tools\n\n1.2 Création du modèle de fonction
\nUtilisez le modèle intégré pour démarrer rapidement :
\ndotnet new lambda.EmptyFunction --name MyFirstLambda --profile default --region us-east-1\nCette commande créera un projet avec les fichiers Function.cs et aws-lambda-tools-defaults.json pour les paramètres de déploiement.
2. Écriture du code de la fonction Serverless en C#
\n2.1 Structure de base d'une fonction Lambda
\nChaque fonction Lambda est une méthode qui reçoit un objet événement et un contexte d'exécution. Voici un exemple simple :
\nusing Amazon.Lambda.Core;\nusing Amazon.Lambda.SQSEvents;\n\n[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]\n\npublic class Function\n{\n public async Task<string> FunctionHandler(SQSEvent evnt, ILambdaContext context)\n {\n context.Logger.LogInformation("Messages reçus : " + evnt.Records.Count);\n \n foreach (var record in evnt.Records)\n {\n await ProcessMessageAsync(record.Body, context);\n }\n \n return "Traité " + evnt.Records.Count + " messages";\n }\n\n private async Task ProcessMessageAsync(string messageBody, ILambdaContext context)\n {\n context.Logger.LogInformation("Traitement : " + messageBody);\n await Task.Delay(100); // Simulation de travail\n }\n}\nNotez l'attribut LambdaSerializer — il indique comment sérialiser/désérialiser le JSON. Pour C#, SystemTextJson est recommandé.
2.2 Travailler avec différents déclencheurs
\nAWS Lambda prend en charge de nombreuses sources d'événements. Voici un exemple pour une requête HTTP via API Gateway :
\npublic async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context)\n{\n var name = request.QueryStringParameters?.ContainsKey("name") == true \n ? request.QueryStringParameters["name"] \n : "monde";\n \n var responseBody = $"Bonjour, {name}!";\n \n return new APIGatewayProxyResponse\n {\n StatusCode = 200,\n Body = responseBody,\n Headers = new Dictionary<string, string> { { "Content-Type", "text/plain" } }\n };\n}\nPour travailler avec HTTP, vous devrez installer le package Amazon.Lambda.APIGatewayEvents.
3. Déploiement et test de la fonction
\n3.1 Test local
\nAvant le déploiement, testez votre code localement avec dotnet lambda invoke :
dotnet lambda invoke --payload "{\\"Records\