Serverless en C# : AWS Lambda, Azure Functions et l'avenir du développement sans serveur

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi le Serverless n'est pas juste un effet de mode, mais un soulagement pour votre portefeuille et vos nerfs

\n\n

Imaginez : 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\n

Dans 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\n

AWS Lambda et C# : comment faire ami-ami avec deux outils puissants

\n\n

AWS 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\n

Création de votre première fonction Lambda en C#

\n\n

Pour commencer, installez AWS Toolkit pour Visual Studio ou utilisez .NET CLI. Créons un projet avec le modèle « AWS Lambda Project ».

\n\n
dotnet 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\n
using 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\n

Remarquez : 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\n

Pourquoi 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
\n\n

Azure Functions pour C# : une alternative digne de ce nom de Microsoft

\n\n

Si 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\n

Exemple de fonction C# pour Azure

\n\n

Créons un déclencheur HTTP avec Azure Functions Core Tools :

\n\n
func init MyFunctionApp --dotnet-isolated\ncd MyFunctionApp\nfunc new --name HttpExample --template "HTTP trigger"
\n\n

Code de la fonction :

\n\n
using 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                

Blogs

Book Recommendations