Einleitung: Warum Serverless und C# das perfekte Paar sind
\nServerless-Architektur (oder serverloses Rechnen) ist ein Modell, bei dem Sie Code schreiben, ohne sich um die Serververwaltung kümmern zu müssen. AWS Lambda ist einer der beliebtesten Dienste zum Ausführen solchen Codes. In Kombination mit C# (.NET) erhalten Sie ein leistungsstarkes, typsicheres und performantes Werkzeug zur Erstellung von Microservices, API-Handlern und Hintergrundaufgaben.
\nIn diesem Artikel gehen wir den gesamten Weg durch: von der Einrichtung der Umgebung bis zum Deployment und Monitoring der ersten Funktion in C# auf AWS Lambda. Das Material eignet sich sowohl für Anfänger als auch für erfahrene Entwickler, die ihr Wissen systematisieren möchten.
\n\n1. Umgebungsvorbereitung und Projekterstellung
\n1.1 Installation der Werkzeuge
\nFür die Arbeit mit C# und AWS Lambda benötigen Sie:
\n- \n
- .NET SDK (8.0 oder 6.0) – herunterladen von dotnet.microsoft.com; \n
- AWS CLI – zur Verwaltung von Ressourcen über das Terminal; \n
- Amazon.Lambda.Tools – globales .NET-Tool für das Deployment. \n
Installieren Sie Lambda Tools mit einem Befehl:
\ndotnet tool install -g Amazon.Lambda.Tools\n\n1.2 Erstellung einer Funktionsvorlage
\nVerwenden Sie die integrierte Vorlage für einen schnellen Start:
\ndotnet new lambda.EmptyFunction --name MyFirstLambda --profile default --region us-east-1\nDieser Befehl erstellt ein Projekt mit der Datei Function.cs und aws-lambda-tools-defaults.json für die Deployment-Einstellungen.
2. Schreiben des Codes für eine Serverless-Funktion in C#
\n2.1 Grundlegende Struktur einer Lambda-Funktion
\nJede Lambda-Funktion ist eine Methode, die ein Ereignisobjekt und einen Ausführungskontext entgegennimmt. Betrachten wir ein einfaches Beispiel:
\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("Empfangene Nachrichten: " + evnt.Records.Count);\n \n foreach (var record in evnt.Records)\n {\n await ProcessMessageAsync(record.Body, context);\n }\n \n return "Verarbeitet " + evnt.Records.Count + " Nachrichten";\n }\n\n private async Task ProcessMessageAsync(string messageBody, ILambdaContext context)\n {\n context.Logger.LogInformation("Verarbeitung: " + messageBody);\n await Task.Delay(100); // Arbeitsimulation\n }\n}\nBeachten Sie das Attribut LambdaSerializer – es gibt an, wie JSON serialisiert/deserialisiert werden soll. Für C# wird SystemTextJson empfohlen.
2.2 Arbeit mit verschiedenen Triggern
\nAWS Lambda unterstützt viele Ereignisquellen. Hier ist ein Beispiel für eine HTTP-Anfrage über 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 : "Welt";\n \n var responseBody = $"Hallo, {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}\nFür die Arbeit mit HTTP müssen Sie das Paket Amazon.Lambda.APIGatewayEvents installieren.
3. Deployment und Testen der Funktion
\n3.1 Lokales Testen
\nÜberprüfen Sie den Code vor dem Deployment lokal mit dotnet lambda invoke:
dotnet lambda invoke --payload "{\\"Records\