Einführung in Serverless und AWS Lambda mit C#
Serverless-Architektur (serverloses Computing) ist ein Entwicklungsmodell, bei dem sich der Entwickler ausschließlich auf den Code der Geschäftslogik konzentriert, während der Cloud-Anbieter die Infrastruktur (Server, Skalierung, Überwachung) verwaltet. AWS Lambda ist einer der beliebtesten Dienste zur Implementierung von Serverless-Funktionen und unterstützt das .NET-Ökosystem hervorragend.
In diesem Artikel behandeln wir den gesamten Arbeitszyklus mit AWS Lambda in C#: von der Projekterstellung bis zum Deployment und Debugging. Sie erfahren, wie Sie die Umgebung einrichten, eine effiziente Funktion schreiben, Ereignisse verarbeiten und typische Fehler vermeiden. Das Material richtet sich an C#-Entwickler, die den Serverless-Ansatz in Amazon Web Services erlernen möchten.
1. Einrichtung der Umgebung und Erstellung des ersten Projekts
Installation der Werkzeuge
Für die Arbeit mit AWS Lambda in C# benötigen Sie:
- .NET SDK Version 6.0 oder 8.0 (empfohlen wird die neueste LTS-Version).
- AWS CLI – die Befehlszeilenschnittstelle zur Verwaltung von AWS-Diensten.
- Amazon.Lambda.Templates – eine Sammlung von Vorlagen für die .NET CLI.
- Docker Desktop (optional) – für lokale Tests mit Lambda-Emulation.
Installieren Sie die Lambda-Vorlagen über das Terminal:
dotnet new -i Amazon.Lambda.TemplatesProjekterstellung
Erstellen Sie eine neue Lambda-Funktion mit dem Befehl:
dotnet new lambda.EmptyFunction -n MyFirstLambda -o ./MyFirstLambdacd MyFirstLambdaDie Projektstruktur enthält die Datei Function.cs mit der Basisklasse Function und einer Handler-Methode. Standardmäßig wird eine Vorlage für eine einfache Funktion verwendet, die eine Zeichenfolge akzeptiert und eine Zeichenfolge zurückgibt.
Öffnen Sie Function.cs und ändern Sie es wie folgt:
using Amazon.Lambda.Core;using Amazon.Lambda.Serialization.SystemTextJson;
[assembly: LambdaSerializer(typeof(DefaultLambdaJsonSerializer))]
public class Function{ public string FunctionHandler(string input, ILambdaContext context) { context.Logger.LogInformation($"Eingabe empfangen: {input}"); return $"Hallo, {input}! Ihre Funktion wurde erfolgreich ausgeführt."; }}Lokales Testen
Zum lokalen Ausführen der Funktion verwenden Sie das Dienstprogramm dotnet lambda invoke oder den Emulator Lambda Runtime Interface Emulator (RIE) in Docker. Beispiel mit RIE:
docker run --rm -v "$PWD/bin/Release/net8.0/publish":/var/task:ro,delegated \ -p 9000:8080 \ public.ecr.aws/lambda/dotnet8:latest \ MyFirstLambda::MyFirstLambda.Function::FunctionHandlerSenden Sie eine Testanfrage mit curl:
curl -X POST "http://localhost:9000/2015-03-31/functions/function/invocations" \ -d '"Welt"'2. Verarbeitung verschiedener Ereignistypen
Arbeiten mit API Gateway (HTTP-Anfragen)
Am häufigsten wird Lambda als Backend für REST-APIs über Amazon API Gateway verwendet. In diesem Fall akzeptiert der Handler ein APIGatewayProxyRequest-Objekt und gibt ein APIGatewayProxyResponse-Objekt zurück.
Installieren Sie das NuGet-Paket:
dotnet add package Amazon.Lambda.APIGatewayEventsBeispiel einer Handler-Funktion für eine HTTP-POST-Anfrage:
using Amazon.Lambda.APIGatewayEvents;using System.Text.Json;
public class Function{ public async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context) { context.Logger.LogInformation($"Anfrage empfangen: {request.HttpMethod} {request.Path}");
// Parsen des Anforderungstexts var body = JsonSerializer.Deserialize<Dictionary<string, string>>(request.Body); var name = body?.GetValueOrDefault("name") ?? "Gast";
//