So führen Sie eine ASP.NET-Web-API auf AWS mit Lambda und API Gateway aus

0
161

AWS Lambda ist eine serverlose Plattform zum Ausführen von Code, ohne die zugrunde liegende Hardware zu verwalten. Es ist sehr flexibel und kann viele verschiedene Workloads ausführen, einschließlich vollständiger C#-APIs mit ASP.NET Core.

Warten Sie, Sie können dies tun Auf Lambda?

Ja! Sie können nicht nur Funktionen ausführen, die auf .NET-Laufzeiten basieren, sondern Sie können mit allen Tools, die Ihnen von ASP.NET zur Verfügung gestellt werden, auf Anfragen antworten. Sie können APIs erstellen, die mit Datenbanken wie der verwalteten RDS-Datenbank von AWS kommunizieren und gleichzeitig perfekt skalierbar sind und auf serverlosen Funktionen ausgeführt werden.

Während frühere Versionen von ASP.NET, die auf .NET Framework (der älteren, reinen Windows-Laufzeit) ausgeführt werden, bekanntermaßen sperrig sind, haben der neue ASP.NET Core-Stack, der auf .NET Core 3.1 und dem neueren .NET 5 ausgeführt wird, erheblich an Bedeutung gewonnen Leistungs- und Speichernutzungsverbesserungen.

Dies wäre normalerweise nicht möglich, da ASP.NET seinen eigenen HTTP-Webserver namens Kestrel verwendet, um auf Anfragen zu antworten, was nicht funktionieren würde, da dies von der Lambda-Laufzeit verarbeitet wird. AWS hat dafür jedoch eine geniale Lösung bereitgestellt; traditionell beinhaltet ein ASP.NET-Setup normalerweise ihren Kestrel-Webserver hinter IIS oder NGINX. Dies kommuniziert mit dem ASP.NET-Framework, um Anfragen zu verarbeiten.

AWS hat eine Proxy-Klasse erstellt, Amazon.Lambda.AspNetCoreServer, die sich um alles vor ASP.NET kümmert. Auf diese Weise können Sie den größten Teil Ihres Codes wiederverwenden, während Sie Ihre API mit Lambda verbinden.

Werbung

Dies bedeutet, dass Sie API Gateway verwenden müssen, aber das ist keine schlechte Sache, da API Gateway für die Verwaltung Ihrer API sehr nützlich ist. Es ermöglicht Ihnen, alle Regeln, die Ihre API zum Funktionieren bringen, streng zu definieren; Natürlich muss Ihre ASP.NET-App so konfiguriert sein, dass sie alle Anfragen von API Gateway verarbeitet.

Dies wird jedoch nicht die größte Erfahrung in Bezug auf die Startzeit sein. Im Vergleich zu leichtgewichtigen Skriptsprachen wie JavaScript und Python haben .NET-Pakete viel mehr Overhead. Es gibt einige Tricks, mit denen Sie die Leistung beschleunigen können, und Sie können sogar mit bereitgestellter Kapazität dafür bezahlen. Andernfalls sollten Sie sich auf Kaltstartzeiten von etwa 1-2 Sekunden einstellen.

Das bedeutet nicht, dass jede Ausführung 2 Sekunden zum Laden der Seite benötigt. Nach dem ersten Laden wird alles initialisiert und es bleibt “heiß” in Lambda für 5 Minuten. Wenn jemand anders sie anfordert, wird die Funktion die Anfrage so behandeln, wie sie normalerweise auf einem tatsächlichen Server ausgeführt würde.

Einrichten von ASP.NET

AWS enthält einen Generator für ASP.NET Lambda-Projekte, der mit dem Boilerplate-Code vorkonfiguriert und in CloudFormation bereitgestellt wird . Wir empfehlen Ihnen, hier zu beginnen, die Dinge auszuprobieren und dann Ihren API-Code zu verschieben. Wenn Sie ihn jedoch in ein vorhandenes Projekt einbinden möchten, bietet AWS auch dafür eine Anleitung.

Sie müssen die AWS Toolkit for Visual Studio-Erweiterung installiert haben, die Sie über “Erweiterungen” verwalten können. in der Menüleiste. Dies sind die Projektvorlagen für AWS-Anwendungen.

Erstellen Sie auf dem Hauptbildschirm von Visual Studio ein neues Projekt:

Sie möchten dies wahrscheinlich in eine eigene Lösung einfügen, wählen Sie also “Leere Lösung” unter “Sonstiges”

Dann können Sie mit der rechten Maustaste in den Dateibereich klicken, um ein neues Projekt hinzuzufügen, und wählen Sie “Serverlose AWS-Anwendung,” oder “Serverlose AWS-Anwendung mit Tests” was auch immer Sie bevorzugen.

Stellen Sie sicher, dass dies in C# ist, es sei denn, Sie möchten aus irgendeinem Grund F# verwenden.

Denken Sie auch daran, dass dies eine “Serverless Application” Projekt, das alle Ressourcen über den Infrastructure-as-Code-Service von AWS CloudFormation verwaltet. Wenn Sie nur einige Lambda-Funktionen erstellen möchten, gibt es auch dafür ein Projekt.

Sie gelangen zu einem Untermenü, in dem Sie auswählen können, welche Art von Blaupause Sie verwenden möchten bauen. Wählen Sie “ASP.NET Core-Web-API” und erstellen Sie das Projekt.

Dies ist größtenteils wie ein Standard-ASP.NET-Projekt konfiguriert. Der Hauptunterschied besteht darin, dass das traditionelle Program.cs durch LambdaEntryPoint.cs als Haupteinstiegspunkt ersetzt wird und die Shim-Klasse enthält, die den AWS-Code von ASP.NET mit dem IWebHostBuilder von ASP.NET verbindet wird verwendet, um die Anwendung zu starten.

Werbung

Sobald alles eingerichtet ist, müssen Sie Ihre Controller, Modelle und Dienste kopieren und Startup.cs durch Ihre Konfiguration ersetzen.

Verwenden Ihrer API

Um dieses Projekt bereitzustellen, enthält AWS integrierte Veröffentlichungsoptionen mit der AWS Toolkit Extension. Klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie “In AWS Lambda veröffentlichen…”

Sie müssen ihm einen Bucket zum Hochladen geben und einen Namen für die CloudFormation-Bereitstellung festlegen.

Das Hochladen und Veröffentlichen dauert eine Sekunde, aber dann sind Sie Sie können zur AWS Lambda Management Console gehen, um Ihre Funktion anzuzeigen. Es hat einen automatisch generierten Namen mit dem CloudFormation-Stack-Namen als Präfix.

Unter Konfiguration > Trigger: Sie können alle API Gateway-Trigger anzeigen, die diese Funktion aufrufen, und sie mithilfe des Endpunkts selbst testen.

Werbung

Sie können auch den vollständigen CloudFormation-Stack anzeigen, der automatisch mit Ihrer Konfiguration erstellt wird.

Wenn Sie es ändern möchten, müssen Sie die serverless.template in Ihrem Projekt bearbeiten. Weitere Informationen finden Sie in unserem Leitfaden zur Verwendung von AWS CloudFormation.

VERWANDTE: Kodieren Sie Ihre AWS-Infrastruktur mit CloudFormation