Serverless-Funktionen in C#: Vollständiger Leitfaden zu AWS Lambda mit .NET
Die Serverless-Architektur wird zum Standard für moderne Anwendungen. AWS Lambda ist einer der beliebtesten Dienste zur Ausführung von Code ohne Serververwaltung. In diesem Artikel werden wir behandeln, wie man Serverless-Funktionen in C# mit .NET 6/8 erstellt, die Umgebung konfiguriert, effizienten Code schreibt und ihn in der Cloud bereitstellt.
Was ist AWS Lambda und warum C#?
AWS Lambda ist ein Rechendienst, der Ihren Code als Reaktion auf Ereignisse ausführt und automatisch die Rechenressourcen verwaltet. C# mit .NET ist eine ausgezeichnete Wahl für Lambda dank:
- Hoher Leistung — .NET 6+ bietet einen schnellen Cold Start (ca. 200-500 ms).
- Vertrauter Syntax — wenn Sie bereits in C# schreiben, ist die Einstiegshürde minimal.
- Reichhaltigem Ökosystem — alle NuGet-Bibliotheken sind verfügbar.
- Integration mit AWS — das SDK für .NET ermöglicht die einfache Arbeit mit S3, DynamoDB, SQS und anderen Diensten.
Serverless-Funktionen in C# eignen sich ideal für Dateiverarbeitung, REST-APIs (über API Gateway), ETL-Prozesse und Microservices.
Projektkonfiguration für AWS Lambda in C#
Um zu beginnen, benötigen Sie:
- .NET SDK 6.0 oder höher
- AWS-Konto
- AWS CLI (empfohlen)
- Das Tool
dotnet lambda(installiert überdotnet tool install -g Amazon.Lambda.Tools)
Erstellen wir ein neues Projekt:
dotnet new lambda.EmptyFunction --name MyFirstLambdacd MyFirstLambdaDie Projektstruktur umfasst:
Function.cs— die Hauptdatei mit der Logik.aws-lambda-tools-defaults.json— Bereitstellungseinstellungen.MyFirstLambda.csproj— die Projektdatei mit den erforderlichen Paketen.
Stellen Sie sicher, dass in .csproj Verweise auf die Pakete vorhanden sind:
<PackageReference Include="Amazon.Lambda.Core" Version="2.2.0" /><PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.3.1" />Schreiben der ersten Serverless-Funktion in C#
Öffnen wir Function.cs und schreiben einen einfachen Handler, der einen Namen entgegennimmt und eine Begrüßung zurückgibt:
using Amazon.Lambda.Core;using Amazon.Lambda.Serialization.SystemTextJson;
[assembly: LambdaSerializer(typeof(DefaultLambdaJsonSerializer))]
public class Function{ public string FunctionHandler(Input input, ILambdaContext context) { context.Logger.LogInformation($"Verarbeite Anfrage für: {input.Name}"); return $"Hallo, {input.Name}! Zeit: {DateTime.UtcNow}"; }}
public class Input{ public string Name { get; set; }}Lassen Sie uns die wichtigsten Punkte durchgehen:
LambdaSerializer— gibt an, wie JSON serialisiert/deserialisiert wird.SystemTextJsonist eine schnelle und moderne Option.ILambdaContext— stellt Informationen über den aktuellen Aufruf bereit: verbleibende Zeit, Logger, Anfrage-ID.Input— eine einfache POCO-Klasse für die Eingabedaten.
Verwenden Sie zum lokalen Testen:
dotnet lambda invoke-function MyFirstLambda --payload "{\\"Name\\": \\"Welt\\"}"Arbeiten mit AWS-Diensten aus Lambda
Die wahre Stärke von Serverless-Funktionen in C# zeigt sich bei der Integration mit anderen Diensten. Betrachten wir ein Beispiel für das Hochladen einer Datei in S3:
using Amazon.S3;using Amazon.S3.Model;using Amazon.Lambda.Core;
public class S3Function{ private readonly IAmazonS3 _s3Client; public S3Function() { _s3Client = new AmazonS3Client(); // verwendet die IAM-Rolle von Lambda }