Warum Serverless nicht nur Hype ist, sondern eine Rettung für Ihren Geldbeutel und Ihre Nerven
\n\nStellen Sie sich vor: Sie haben eine coole API in C# geschrieben, auf einer virtuellen Maschine gestartet, und sie steht 23 Stunden am Tag ungenutzt herum. Sie zahlen für heiße Luft. Kommt Ihnen das bekannt vor? Wenn ja, dann sind Serverless-Funktionen in C# Ihr Rettungsanker. Serverloses Computing (oder Function-as-a-Service) ermöglicht es Ihnen, Code nur dann auszuführen, wenn er wirklich benötigt wird. Keine Serveranmietung, keine manuelle CI/CD-Konfiguration für die Infrastruktur, keine Kopfschmerzen mit der Skalierung.
\n\nIn diesem Artikel werden wir analysieren, wie man Serverless-Funktionen in C# für AWS Lambda und Azure Functions schreibt, sie vergleichen, echten Code schreiben und verstehen, warum dies die beste Wahl für Microservices, Ereignisbehandler und Backends für mobile Anwendungen ist. Und ja, es wird viel Code geben – ohne überflüssige Fülltexte.
\n\nAWS Lambda und C#: Wie man zwei leistungsstarke Werkzeuge verbindet
\n\nAWS Lambda C# ist wohl die beliebteste Option für .NET-Entwickler, die mit Amazon Web Services arbeiten. Lambda unterstützt .NET Core 3.1, .NET 6, .NET 8 und sogar .NET 9 (überprüfen Sie die Aktualität zum Zeitpunkt des Lesens). Der Hauptvorteil: Sie schreiben in vertrautem C#, und AWS kümmert sich selbst um die Laufzeitumgebung.
\n\nErstellen unserer ersten Lambda-Funktion in C#
\n\nInstallieren Sie zunächst das AWS Toolkit für Visual Studio oder verwenden Sie die .NET CLI. Erstellen wir ein Projekt mit der Vorlage "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\nJetzt schreiben wir die eigentliche Funktion. Ein klassisches Beispiel – die Verarbeitung einer API-Gateway-Anfrage und die Rückgabe von 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 = $"Hallo, Welt! Deine Anfrage: {input.Body ?? "leer"}";\n context.Logger.LogInformation("Lambda-Funktion aufgerufen");\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\nBeachten Sie: Der Code ist asynchron, verwendet die integrierte JSON-Serialisierung und Protokollierung. Dies ist ein minimal lebensfähiges Produkt, das bereits unter Last arbeiten kann.
\n\nWarum gewinnt AWS Lambda für C#?
\n- \n
- Cold Start: AWS hat den Start von .NET-Funktionen durch SnapStart optimiert – der Start dauert jetzt weniger als 200 ms. \n
- Integration: Funktioniert out-of-the-box mit S3, DynamoDB, SQS, API Gateway. \n
- Überwachung: CloudWatch sammelt Protokolle, Metriken, Fehler. \n
Azure Functions für C#: Eine würdige Alternative von Microsoft
\n\nWenn Ihr Projekt bereits an das Microsoft-Ökosystem gebunden ist (Azure DevOps, Active Directory, SQL Server), dann könnte Azure Functions C# bequemer sein. Sie unterstützen nicht nur den isolierten Prozess (isolated process), sondern auch das prozessinterne Modell.
\n\nBeispiel einer Funktion in C# für Azure
\n\nErstellen wir einen HTTP-Trigger mit Azure Functions Core Tools:
\n\nfunc init MyFunctionApp --dotnet-isolated\ncd MyFunctionApp\nfunc new --name HttpExample --template "HTTP trigger"\n\nDer Code der Funktion:
\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