Pourquoi le Serverless n'est pas juste un effet de mode, mais un soulagement pour votre portefeuille et vos nerfs
\n\nImaginez : vous avez écrit une super API en C#, vous l'avez déployée sur une machine virtuelle, et elle reste inactive 23 heures sur 24. Vous payez pour du vide. Cela vous dit quelque chose ? Si oui, alors les fonctions serverless en C# sont votre bouée de sauvetage. Le calcul sans serveur (ou Function-as-a-Service) vous permet d'exécuter du code uniquement lorsque cela est réellement nécessaire. Plus de location de serveurs, plus de configuration manuelle de CI/CD pour l'infrastructure, plus de maux de tête avec la mise à l'échelle.
\n\nDans cet article, nous verrons comment écrire des fonctions serverless en C# pour AWS Lambda et Azure Functions, nous les comparerons, écrirons du code réel et comprendrons pourquoi c'est le meilleur choix pour les microservices, les gestionnaires d'événements et le backend des applications mobiles. Et oui, il y aura beaucoup de code — sans blabla.
\n\nAWS Lambda et C# : comment faire ami-ami avec deux outils puissants
\n\nAWS Lambda C# est sans doute l'option la plus populaire pour les développeurs .NET travaillant avec Amazon Web Services. Lambda prend en charge .NET Core 3.1, .NET 6, .NET 8 et même .NET 9 (vérifiez la version actuelle au moment de la lecture). Le principal avantage est que vous écrivez en C# familier, et AWS s'occupe lui-même de l'environnement d'exécution.
\n\nCréation de votre première fonction Lambda en C#
\n\nPour commencer, installez AWS Toolkit pour Visual Studio ou utilisez .NET CLI. Créons un projet avec le modèle « AWS Lambda Project ».
\n\ndotnet new lambda.EmptyFunction --name HelloWorldFunction\ncd HelloWorldFunction\ndotnet add package Amazon.Lambda.Core\ndotnet add package Amazon.Lambda.Serialization.SystemTextJson\n\nÉcrivons maintenant la fonction elle-même. Exemple classique : traitement d'une requête API Gateway et retour d'un JSON.
\n\nusing Amazon.Lambda.Core;\nusing Amazon.Lambda.Serialization.SystemTextJson;\n\n[assembly: LambdaSerializer(typeof(DefaultLambdaJsonSerializer))]\n\npublic class Function\n{\n public async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest input, ILambdaContext context)\n {\n var message = $"Bonjour le monde ! Ta requête : {input.Body ?? "vide"}";\n context.Logger.LogInformation("Fonction Lambda appelée");\n\n return new APIGatewayProxyResponse\n {\n StatusCode = 200,\n Body = JsonSerializer.Serialize(new { message, timestamp = DateTime.UtcNow }),\n Headers = new Dictionary<string, string> { { "Content-Type", "application/json" } }\n };\n }\n}\n\nRemarquez : le code est asynchrone, utilise la sérialisation JSON intégrée et la journalisation. C'est un produit minimum viable qui peut déjà fonctionner sous charge.
\n\nPourquoi AWS Lambda est gagnant pour C# ?
\n- \n
- Cold start : AWS a optimisé le lancement des fonctions .NET avec SnapStart — le démarrage prend désormais moins de 200 ms. \n
- Intégration : Fonctionne nativement avec S3, DynamoDB, SQS, API Gateway. \n
- Monitoring : CloudWatch collecte les logs, métriques et erreurs. \n
Azure Functions pour C# : une alternative digne de ce nom de Microsoft
\n\nSi votre projet est déjà lié à l'écosystème Microsoft (Azure DevOps, Active Directory, SQL Server), alors Azure Functions C# pourrait être plus pratique. Elles prennent en charge non seulement le processus isolé (isolated process), mais aussi le modèle intra-processus.
\n\nExemple de fonction C# pour Azure
\n\nCréons un déclencheur HTTP avec Azure Functions Core Tools :
\n\nfunc init MyFunctionApp --dotnet-isolated\ncd MyFunctionApp\nfunc new --name HttpExample --template "HTTP trigger"\n\nCode de la fonction :
\n\nusing Microsoft.Azure.Functions.Worker;\nusing Microsoft.Extensions.Logging;\n\npublic class HttpExample\n{\n private readonly ILogger<HttpExample> _logger;\n\n public HttpExample(ILogger<HttpExample> logger)\n {\n _logger