Come eseguire un'API Web ASP.NET su AWS con Lambda e API Gateway

0
170

AWS Lambda è una piattaforma serverless per eseguire codice senza gestire l'hardware sottostante. È molto flessibile e può eseguire molti carichi di lavoro diversi, incluse API C# complete utilizzando ASP.NET Core.

Aspetta, puoi farlo Su Lambda?

Sì! Non solo puoi eseguire funzioni basate su runtime .NET, puoi rispondere alle richieste utilizzando tutti gli strumenti forniti da ASP.NET. Puoi creare API che comunicano con i database, come il database RDS gestito da AWS, il tutto perfettamente scalabile in esecuzione su funzioni serverless.

Mentre le versioni precedenti di ASP.NET vengono eseguite su .NET Framework (il runtime più vecchio, solo per Windows) sono note per essere ingombranti, il nuovo stack ASP.NET Core in esecuzione su .NET Core 3.1 e il più recente .NET 5 hanno reso significativo miglioramenti delle prestazioni e dell'utilizzo della memoria.

Ciò non sarebbe normalmente possibile, poiché ASP.NET utilizza il proprio server Web HTTP chiamato Kestrel per rispondere alle richieste, che non funzionerebbe poiché viene gestito dal runtime Lambda. Tuttavia, AWS ha fornito una soluzione ingegnosa per questo; tradizionalmente, una configurazione ASP.NET di solito coinvolge il loro server web Kestrel dietro IIS o NGINX. Questo comunica al framework ASP.NET per gestire le richieste.

AWS ha creato una classe proxy, Amazon.Lambda.AspNetCoreServer, che si occupa di tutto davanti ad ASP.NET. Ciò ti consente di riutilizzare la maggior parte del tuo codice mentre colleghi la tua API a Lambda.

Pubblicità

Ciò significa che dovrai utilizzare API Gateway, ma non è una cosa negativa poiché API Gateway è molto utile per gestire la tua API. Ti permette di definire rigorosamente tutte le regole che fanno funzionare la tua API; ovviamente, dovrai avere la tua app ASP.NET configurata per gestire tutte le richieste da API Gateway.

Tuttavia, questa non sarà la migliore esperienza in termini di tempo di avvio. Rispetto ai linguaggi di scripting leggeri come JavaScript e Python, i pacchetti .NET hanno un sovraccarico molto maggiore. Ci sono alcuni trucchi che puoi fare per accelerare le prestazioni e puoi persino pagarlo con la capacità assegnata. Altrimenti, dovresti essere preparato per tempi di avvio a freddo di circa 1-2 secondi.

Questo non significa che ogni esecuzione impiegherà 2 secondi per caricare la pagina. Una volta eseguito il primo caricamento, tutto viene inizializzato e viene mantenuto “caldo” in Lambda per 5 minuti. Se qualcun altro lo richiede, la funzione gestirà la richiesta come farebbe normalmente su un server reale.

Configurazione di ASP.NET

AWS include un generatore per progetti ASP.NET Lambda preconfigurato con il codice standard e distribuito su CloudFormation . Ti consigliamo di iniziare da qui, testare le cose e quindi spostare il codice API, ma se desideri inserirlo in un progetto esistente, AWS ha una guida anche per questo.

Avrai bisogno dell'estensione AWS Toolkit per Visual Studio installata, che puoi gestire da “Estensioni” nella barra dei menu. Questo è ciò che contiene i modelli di progetto per le applicazioni AWS.

Dalla schermata iniziale di Visual Studio, crea un nuovo progetto:

Probabilmente vorrai inserirlo nella sua soluzione, quindi seleziona “Soluzione vuota” sotto “Altro.”

Quindi, puoi fare clic con il pulsante destro del mouse nel riquadro dei file per aggiungere un nuovo progetto e selezionare “Applicazione serverless AWS,” o “AWS Serverless Application with Tests,” quello che preferisci.

Assicurati che sia in C#, a meno che tu non voglia usare F# per qualche motivo.

Tieni inoltre presente che si tratta di un'“applicazione serverless” project, che gestisce tutte le risorse tramite il servizio Infrastructure-as-code di AWS, CloudFormation. Se vuoi solo creare alcune funzioni Lambda, c'è un progetto anche per quello.

Verrai indirizzato a un sottomenu in cui puoi scegliere il tipo di progetto che desideri costruire. Seleziona “API Web ASP.NET Core” e creare il progetto.

Per la maggior parte, questo è configurato come un progetto ASP.NET standard. La differenza principale è che il Program.cs tradizionale è sostituito da LambdaEntryPoint.cs come punto di ingresso principale e contiene la classe shim che collega il codice AWS a IWebHostBuilder di ASP.NET, che viene utilizzato per avviare l'applicazione.

Pubblicità

Una volta che tutto è installato e funzionante, dovrai copiare i controller, i modelli e i servizi e sostituire Startup.cs con la tua configurazione.

Utilizzo dell'API

Per distribuire questo progetto, AWS include opzioni di pubblicazione integrate utilizzando l'estensione AWS Toolkit. Fare clic con il pulsante destro del mouse sul progetto e selezionare “Pubblica su AWS Lambda…”

Devi assegnargli un bucket in cui eseguire il caricamento e impostare un nome per l'implementazione di CloudFormation.

Ci vorrà un secondo per caricare e pubblicare, ma poi sarai in grado di accedere alla Console di gestione AWS Lambda per visualizzare la tua funzione. Avrà un nome generato automaticamente utilizzando il nome dello stack CloudFormation come prefisso.

In Configurazione > Trigger, puoi visualizzare tutti i trigger del gateway API che chiamano questa funzione e testarlo tu stesso utilizzando l'endpoint.

Pubblicità

Puoi anche visualizzare lo stack CloudFormation completo che viene creato automaticamente utilizzando la tua configurazione.

Se vuoi cambiarlo, devi modificare il serverless.template nel tuo progetto. Per ulteriori informazioni, puoi fare riferimento alla nostra guida sull'utilizzo di AWS CloudFormation.

RELAZIONATO: Codifica la tua infrastruttura AWS con CloudFormation