View a markdown version of this page

Distribuisci ASP.NET applicazioni - 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à.

Distribuisci ASP.NET applicazioni

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

Prerequisiti

SDK .NET 8

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

Amazon.Lambda.Tools

Per creare le funzioni Lambda, usa l'estensione degli strumenti globali .NET Amazon.Lambda.Tools. Per installare Amazon.Lambda.Tools, esegui il comando riportato:

dotnet tool install -g Amazon.Lambda.Tools

Per ulteriori informazioni sull'Amazon.Lambda.Toolsestensione.NET CLI, consulta il repository AWS Extensions for .NET CLI su. GitHub

Amazon.Lambda.Templates

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

dotnet new --install Amazon.Lambda.Templates

Distribuzione di un'API ASP.NET Web su Lambda

Per distribuire un'API Web utilizzando ASP.NET, puoi utilizzare i modelli .NET Lambda per creare un nuovo progetto di API Web. Usa il comando seguente per inizializzare un nuovo progetto di API ASP.NET web. 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 fa parte della stringa del gestore utilizzata da Lambda per richiamare la funzione. Il FunctionHandlerAsync metodo trasforma il payload dell'evento in entrata nel ASP.NET formato corretto e la risposta in un payload di ASP.NET 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 CloudFormation.

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

Quando distribuisci un'API utilizzando il dotnet lambda deploy-serverless comando, CloudFormation assegna alla tua 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 CloudFormation per ulteriori informazioni.

Distribuzione di API minime su Lambda ASP.NET

Per distribuire un'API ASP.NET minima su Lambda, puoi utilizzare i modelli .NET Lambda per creare un nuovo progetto API minimo. 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 la tua API minima per l'esecuzione su Lambda, potresti dover modificare questo codice in modo che le richieste e le risposte tra Lambda e ASP.NET Core siano 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 CloudFormation.

cd MinimalApiOnLambda/src/MinimalApiOnLambda dotnet lambda deploy-serverless