Hur man kör ett ASP.NET webb-API på AWS med Lambda och API Gateway

0
152

AWS Lambda är en serverlös plattform för att köra kod utan att hantera den underliggande hårdvaran. Det är mycket flexibelt och kan köra många olika arbetsbelastningar, inklusive fullständiga C # API: er med ASP.NET Core.

Vänta, du kan göra det På Lambda?

Japp! Inte bara kan du köra funktioner baserat på .NET-driftstider, du kan svara på förfrågningar med hjälp av alla verktyg som du får från ASP.NET. Du kan skapa API: er som pratar med databaser, som AWS: s hanterade RDS-databas, samtidigt som de är perfekt skalbara på serverlösa funktioner.

Medan tidigare versioner av ASP.NET körs på .NET Framework (den äldre, endast Windows-körtiden) har varit kända för att vara skrymmande, har den nya ASP.NET Core-stacken som körs på. NET Core 3.1 och den nyare. NET 5 gjort betydande förbättringar av prestanda och minnesanvändning.

Detta skulle normalt inte vara möjligt, eftersom ASP.NET använder sin egen HTTP-webbserver som heter Kestrel för att svara på förfrågningar, vilket inte fungerar eftersom den hanteras av Lambdas körtid. AWS har dock tillhandahållit en genial fix för detta; traditionellt involverar en ASP.NET-installation vanligtvis deras Kestrel-webbserver bakom IIS eller NGINX. Detta talar med ASP.NET-ramverket för att hantera förfrågningar.

AWS har skapat en proxyklass, Amazon.Lambda.AspNetCoreServer, som tar hand om allt framför ASP.NET. Detta låter dig återanvända det mesta av din kod medan du överbryggar ditt API till Lambda.

Annonsering

Det betyder att du måste använda API Gateway, men det är inte dåligt eftersom API Gateway är mycket användbart för att hantera ditt API. Det låter dig strikt definiera alla regler som gör att din API fungerar; naturligtvis måste du ha din ASP.NET-app konfigurerad för att hantera alla förfrågningar från API Gateway.

Detta kommer dock inte att vara den största upplevelsen när det gäller starttid. Jämfört med lätta skriptspråk som JavaScript och Python har .NET-paket mycket mer omkostnader. Det finns några knep du kan göra för att påskynda prestanda, och du kan till och med betala för det med avsedd kapacitet. Annars bör du vara beredd på kalla starttider cirka 1-2 sekunder.

Detta betyder inte att varje körning tar två sekunder att ladda sidan. När den första lasten har hänt initialiseras allt och det är varmt & # 8220; hett & # 8221; i Lambda i 5 minuter. Om någon annan begär det kommer funktionen att hantera begäran som den normalt körs på en faktisk server.

Ställa in ASP.NET

AWS innehåller en generator för ASP.NET Lambda-projekt som är förkonfigurerad med pannkodskoden och distribution till CloudFormation . Vi rekommenderar att du börjar här, testar saker och sedan flyttar din API-kod, men om du vill blockera den i ett befintligt projekt har AWS också en guide för det.

Du behöver installera AWS Toolkit för Visual Studio-tillägg, som du kan hantera från & # 8220; Extensions & # 8221; i menyraden. Det här är vad som innehåller projektmallarna för AWS-applikationer.

Skapa ett nytt projekt från huvudskärmen för Visual Studio:

Annons

Du kommer antagligen vilja sätta detta i sin egen lösning, så välj & # 8220; Tom lösning & # 8221; under & # 8220; Övrigt. & # 8221;

Sedan kan du högerklicka i filrutan för att lägga till ett nytt projekt och välja & # 8220; AWS serverlös applikation, & # 8221; eller & # 8220; AWS serverlös applikation med test, & # 8221; oavsett vad du föredrar.

Se till att detta står i C #, såvida du inte vill använda F # av någon anledning.

Tänk också på att detta är en & # 8220; serverfri applikation & # 8221; projekt, som hanterar alla resurser genom AWS infrastruktur-som-kod-tjänst, CloudFormation. Om du bara ville göra några Lambda-funktioner finns det också ett projekt för det.

Du kommer till en undermeny där du kan välja vilken typ av ritning du vill bygga. Välj & # 8220; ASP.NET Core Web API & # 8221; och skapa projektet.

För det mesta är detta konfigurerat som ett standard ASP.NET-projekt. Huvudskillnaden är att den traditionella Program.cs ersätts av LambdaEntryPoint.cs som huvudingång, och den innehåller shimklassen som överbryggar AWS-kod till ASP.NET: s IWebHostBuilder, som används för att starta applikationen.

Annons

När allt är igång måste du kopiera över dina kontroller, modeller och tjänster och ersätta Startup.cs med din konfiguration.

Använda ditt API

För att distribuera detta projekt innehåller AWS inbyggda publiceringsalternativ med hjälp av AWS Toolkit Extension. Högerklicka på ditt projekt och välj & # 8220; Publicera till AWS Lambda & # 8230; & # 8221;

Du måste ge den en hink att ladda upp till den och ange ett namn för distributionen av CloudFormation.

Det tar en sekund att ladda upp och publicera, men du kommer då att vara kan gå till AWS Lambda Management Console för att se din funktion. Det kommer att ha ett automatiskt genererat namn med CloudFormation-stacknamnet som prefix.

Under Configuration & gt; Triggers, du kan visa alla API-gateway-utlösare som kallar den här funktionen och testa den själv med hjälp av slutpunkten.

Annons

Du kan också visa hela CloudFormation-stacken som skapas automatiskt med din konfiguration.

Om du vill ändra det, måste du redigera den serverlösa. mall i ditt projekt. För mer information, se vår guide om hur du använder AWS CloudFormation.

RELATERAD: Kodifiera din AWS-infrastruktur med CloudFormation