Implementa applicazioni ASP.NET - AWS Lambda

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Implementa applicazioni ASP.NET

Oltre a ospitare funzioni basate sugli eventi, puoi utilizzare .NET con Lambda anche per ospitare applicazioni ASP.NET leggere. È possibile creare e distribuire applicazioni ASP.NET utilizzando il pacchetto. Amazon.Lambda.AspNetCoreServer NuGet In questa sezione, imparerai come distribuire un'API Web ASP.NET in Lambda utilizzando gli strumenti della CLI .NET Lambda.

Prerequisiti

SDK .NET 8

Installa l'SDK .NET 8 e ASP.NET Core Runtime.

Amazon.Lambda.Tools

Per creare le tue funzioni Lambda, usi il Amazon.Lambda.ToolsEstensione.NET Global Tools. Per installare Amazon.Lambda.Tools, esegui il seguente comando:

dotnet tool install -g Amazon.Lambda.Tools

Per ulteriori informazioni su Amazon.Lambda.Tools Estensione.NET CLI, vedi l'archivio AWS Extensions for .NET CLI su. GitHub

Amazon.Lambda.Templates

Per generare il codice della funzione Lambda, usa il Amazon.Lambda.Templates NuGet pacchetto. Per installare questo pacchetto del modello, esegui il comando riportato:

dotnet new --install Amazon.Lambda.Templates

Implementazione di un'API Web ASP.NET in Lambda

Per implementare un'API Web utilizzando ASP.NET, puoi utilizzare i modelli Lambda .NET per creare un nuovo progetto di API Web. Utilizza il comando seguente per inizializzare un nuovo progetto di API Web ASP.NET. Nel comando di esempio, diamo un nome al progetto AspNetOnLambda.

dotnet new serverless.AspNetCoreWebAPI -n AspNetOnLambda

Questo comando crea i seguenti file e directory nella directory di progetto.

. └── AspNetOnLambda ├── src │   └── AspNetOnLambda │   ├── AspNetOnLambda.csproj │   ├── Controllers │   │   └── ValuesController.cs │   ├── LambdaEntryPoint.cs │   ├── LocalEntryPoint.cs │   ├── Readme.md │   ├── Startup.cs │   ├── appsettings.Development.json │   ├── appsettings.json │   ├── aws-lambda-tools-defaults.json │   └── serverless.template └── test └── AspNetOnLambda.Tests ├── AspNetOnLambda.Tests.csproj ├── SampleRequests │   └── ValuesController-Get.json ├── ValuesControllerTests.cs └── appsettings.json

Quando Lambda richiama la funzione, il punto di ingresso che utilizza è il file LambdaEntryPoint.cs. Il file creato dal modello Lambda .NET contiene il seguente codice.

namespace AspNetOnLambda; public class LambdaEntryPoint : Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction { protected override void Init(IWebHostBuilder builder) { builder .UseStartup≪Startup≫(); } protected override void Init(IHostBuilder builder) { } }

Il punto di ingresso utilizzato da Lambda deve ereditare da una delle tre classi base del pacchetto Amazon.Lambda.AspNetCoreServer. Queste tre classi base sono:

  • APIGatewayProxyFunction

  • APIGatewayHttpApiV2ProxyFunction

  • ApplicationLoadBalancerFunction

La classe predefinita utilizzata quando si crea il file LambdaEntryPoint.cs utilizzando il modello Lambda .NET fornito è APIGatewayProxyFunction. La classe base che usi nella tua funzione dipende dal livello API che precede la tua funzione Lambda.

Ciascuna delle tre classi base contiene un metodo pubblico denominato FunctionHandlerAsync. Il nome di questo metodo farà parte della stringa del gestore che Lambda usa per richiamare la tua funzione. Il metodo FunctionHandlerAsync trasforma il payload dell'evento in entrata nel formato ASP.NET corretto e la risposta ASP.NET in un payload di risposta Lambda. Per il progetto AspNetOnLambda di esempio mostrato, la stringa del gestore sarebbe la seguente.

AspNetOnLambda::AspNetOnLambda.LambdaEntryPoint::FunctionHandlerAsync

Per implementare l'API in Lambda, emetti i seguenti comandi per navigare nella directory contenente il file del codice sorgente e implementa la funzione utilizzando AWS CloudFormation.

cd AspNetOnLambda/src/AspNetOnLambda dotnet lambda deploy-serverless
Suggerimento

Quando distribuisci un'API utilizzando il dotnet lambda deploy-serverless comando, AWS CloudFormation assegna alla funzione Lambda un nome basato sul nome dello stack specificato durante la distribuzione. Per assegnare un nome personalizzato alla funzione Lambda, modifica il file serverless.template in modo da aggiungere una proprietà FunctionName alla risorsa AWS::Serverless::Function. Consulta Tipo di nome nella Guida per l'utente di AWS CloudFormation per ulteriori informazioni.

Distribuzione minima APIs di ASP.NET su Lambda

Per implementare un'API minima ASP.NET, puoi utilizzare i modelli Lambda .NET per creare un nuovo progetto di API minima. Utilizza il comando seguente per inizializzare un nuovo progetto di API minima ASP.NET. In questo esempio, al progetto assegnamo il nome MinimalApiOnLambda.

dotnet new serverless.AspNetCoreMinimalAPI -n MinimalApiOnLambda

Questo comando crea i seguenti file e directory nella directory di progetto.

└── MinimalApiOnLambda └── src └── MinimalApiOnLambda ├── Controllers │   └── CalculatorController.cs ├── MinimalApiOnLambda.csproj ├── Program.cs ├── Readme.md ├── appsettings.Development.json ├── appsettings.json ├── aws-lambda-tools-defaults.json └── serverless.template

Il file Program.cs contiene il seguente codice.

var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); // Add AWS Lambda support. When application is run in Lambda Kestrel is swapped out as the web server with Amazon.Lambda.AspNetCoreServer. This // package will act as the webserver translating request and responses between the Lambda event source and ASP.NET Core. builder.Services.AddAWSLambdaHosting(LambdaEventSource.RestApi); var app = builder.Build(); app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.MapGet("/", () => "Welcome to running ASP.NET Core Minimal API on AWS Lambda"); app.Run();

Per configurare l'API minima da eseguire su Lambda, potrebbe essere necessario modificare questo codice in modo che le richieste e le risposte tra Lambda e ASP.NET Core vengano tradotte correttamente. Per impostazione predefinita, la funzione è configurata per un'origine di eventi della REST API. Per un'API HTTP o un Application Load Balancer, sostituisci (LambdaEventSource.RestApi) con una delle seguenti opzioni:

  • (LambdaEventSource.HttpAPi)

  • (LambdaEventSource.ApplicationLoadBalancer)

Per implementare l'API minima in Lambda, emetti i seguenti comandi per navigare nella directory contenente il file del codice sorgente e implementa la funzione utilizzando AWS CloudFormation.

cd MinimalApiOnLambda/src/MinimalApiOnLambda dotnet lambda deploy-serverless