Serverless mit C#: AWS Lambda, Azure Functions und die Zukunft der serverlosen Entwicklung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum Serverless nicht nur Hype ist, sondern eine Rettung für Ihren Geldbeutel und Ihre Nerven

\n\n

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

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

AWS Lambda und C#: Wie man zwei leistungsstarke Werkzeuge verbindet

\n\n

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

Erstellen unserer ersten Lambda-Funktion in C#

\n\n

Installieren 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\n
dotnet new lambda.EmptyFunction --name HelloWorldFunction\ncd HelloWorldFunction\ndotnet add package Amazon.Lambda.Core\ndotnet add package Amazon.Lambda.Serialization.SystemTextJson
\n\n

Jetzt schreiben wir die eigentliche Funktion. Ein klassisches Beispiel – die Verarbeitung einer API-Gateway-Anfrage und die Rückgabe von 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 = $"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\n

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

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

Azure Functions für C#: Eine würdige Alternative von Microsoft

\n\n

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

Beispiel einer Funktion in C# für Azure

\n\n

Erstellen wir einen HTTP-Trigger mit Azure Functions Core Tools:

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

Der Code der Funktion:

\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

Buchempfehlungen