Serverless-Funktionen in C# auf AWS Lambda: Vollständiger Leitfaden von A bis Z

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

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.Templates


Projekterstellung

Erstellen Sie eine neue Lambda-Funktion mit dem Befehl:

dotnet new lambda.EmptyFunction -n MyFirstLambda -o ./MyFirstLambdacd MyFirstLambda


Die 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::FunctionHandler


Senden 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.APIGatewayEvents


Beispiel 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";

//

Blogs

Buchempfehlungen