Een ASP.NET-web-API uitvoeren op AWS met Lambda en API Gateway?

0
65

AWS Lambda is een serverloos platform voor het uitvoeren van code zonder de onderliggende hardware te beheren. Het is zeer flexibel en kan veel verschillende workloads uitvoeren, inclusief volledige C# API's met ASP.NET Core.

Wacht, u kunt dit doen Op Lambda?

Ja! U kunt niet alleen functies uitvoeren op basis van .NET-runtimes, u kunt ook reageren op verzoeken met alle tools die u van ASP.NET krijgt. U kunt API's maken die met databases communiceren, zoals de beheerde RDS-database van AWS, terwijl ze perfect schaalbaar zijn en draaien op serverloze functies.

Terwijl eerdere versies van ASP.NET op .NET Framework (de oudere, alleen voor Windows draaiende runtime) bekend stonden als omvangrijk, hebben de nieuwe ASP.NET Core-stack die op .NET Core 3.1 draait en het nieuwere .NET 5 aanzienlijke prestatie- en geheugengebruikverbeteringen.

Dit zou normaal gesproken niet mogelijk zijn, aangezien ASP.NET zijn eigen HTTP-webserver, Kestrel genaamd, gebruikt om op verzoeken te reageren, wat niet zou werken omdat dat wordt afgehandeld door de Lambda-runtime. AWS heeft hier echter een ingenieuze oplossing voor geboden; traditioneel omvat een ASP.NET-installatie meestal hun Kestrel-webserver achter IIS of NGINX. Deze praat met het ASP.NET-framework om verzoeken af ​​te handelen.

AWS heeft een proxyklasse gecreëerd, Amazon.Lambda.AspNetCoreServer, die alles voor ASP.NET regelt. Hierdoor kunt u het grootste deel van uw code hergebruiken terwijl u uw API naar Lambda overbrugt.

Advertentie

Dit betekent dat u API Gateway moet gebruiken, maar dat is geen slechte zaak, aangezien API Gateway erg handig is voor het beheren van uw API. Hiermee kunt u alle regels die uw API laten functioneren strikt definiëren; natuurlijk moet u uw ASP.NET-app hebben geconfigureerd om alle verzoeken van API Gateway af te handelen.

Dit wordt echter niet de beste ervaring in termen van opstarttijd. Vergeleken met lichtgewicht scripttalen zoals JavaScript en Python, hebben .NET-pakketten veel meer overhead. Er zijn enkele trucs die u kunt doen om de prestaties te versnellen, en u kunt er zelfs voor betalen met ingerichte capaciteit. Anders moet je voorbereid zijn op koude opstarttijden van ongeveer 1-2 seconden.

Dit betekent niet dat elke uitvoering 2 seconden nodig heeft om de pagina te laden. Zodra de eerste keer is geladen, wordt alles geïnitialiseerd en wordt het 'hot' gehouden. in Lambda gedurende 5 minuten. Als iemand anders het verzoekt, zal de functie het verzoek afhandelen zoals het normaal zou draaien op een echte server.

ASP.NET instellen

AWS bevat een generator voor ASP.NET Lambda-projecten die vooraf is geconfigureerd met de boilerplate-code en implementatie in CloudFormation . We raden u aan hier te beginnen, dingen uit te testen en vervolgens uw API-code te verplaatsen, maar als u deze in een bestaand project wilt vastzetten, heeft AWS daar ook een handleiding voor.

U moet de AWS Toolkit voor Visual Studio-extensie hebben geïnstalleerd, die u kunt beheren vanuit “Extensions” in de menubalk. Dit is wat de projectsjablonen voor AWS-applicaties bevat.

Maak vanuit het hoofdscherm van Visual Studio een nieuw project:

U zult dit waarschijnlijk in een eigen oplossing willen plaatsen, dus selecteer “Blank Solution” onder “Anders.”

Vervolgens kunt u met de rechtermuisknop in het bestandsvenster klikken om een ​​nieuw project toe te voegen en “AWS serverloze applicatie,” of “AWS serverloze applicatie met tests,” wat u maar wilt.

Zorg ervoor dat dit in C# is, tenzij u om de een of andere reden F# wilt gebruiken.

Houd er ook rekening mee dat dit een “Serverloze toepassing” project, dat alle resources beheert via de infrastructuur-als-code-service van AWS, CloudFormation. Als je alleen wat Lambda-functies wilt maken, is daar ook een project voor.

Je wordt naar een submenu geleid waar je kunt kiezen welk type blauwdruk je wilt bouwen. Selecteer “ASP.NET Core Web API” en maak het project.

Voor het grootste deel is dit geconfigureerd als een standaard ASP.NET-project. Het belangrijkste verschil is dat het traditionele Program.cs wordt vervangen door LambdaEntryPoint.cs als het belangrijkste toegangspunt, en het bevat de shim-klasse die de AWS-code van ASP.NET overbrugt naar IWebHostBuilder van ASP.NET, die wordt gebruikt om de toepassing te starten.

Advertentie

Zodra alles in gebruik is, moet u uw controllers, modellen en services kopiëren en Startup.cs vervangen door uw configuratie.

Uw API gebruiken

Om dit project te implementeren, bevat AWS ingebouwde publicatie-opties met behulp van de AWS Toolkit-extensie. Klik met de rechtermuisknop op uw project en selecteer “Publiceren naar AWS Lambda…”

U moet het een bucket geven om naar te uploaden en een naam instellen voor de CloudFormation-implementatie.

Het duurt even om te uploaden en te publiceren, maar dan ben je klaar in staat om naar de AWS Lambda Management Console te gaan om uw functie te bekijken. Het heeft een automatisch gegenereerde naam met de CloudFormation-stacknaam als voorvoegsel.

Onder Configuratie > Triggers, u kunt alle API Gateway-triggers bekijken die deze functie aanroepen en deze zelf testen met behulp van het eindpunt.

Advertentie

U kunt ook de volledige CloudFormation-stack bekijken die automatisch wordt gemaakt met uw configuratie.

Als u dit wilt wijzigen, moet u de serverless.template in uw project bewerken. Raadpleeg voor meer informatie onze handleiding over het gebruik van AWS CloudFormation.

GERELATEERD: Codificeer uw AWS-infrastructuur met CloudFormation