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 utilizzare.NET con Lambda Event Functions 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 in Lambda utilizzando lo strumento.NET Lambda CLI.
Argomenti
Prerequisiti
- SDK .NET 8
-
Installa .NET 8
SDK e 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.ToolsPer ulteriori informazioni sull'Amazon.Lambda.Toolsestensione.NET CLI, consulta 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 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 ASP.NET risposta 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 CloudFormation.
cd AspNetOnLambda/src/AspNetOnLambda dotnet lambda deploy-serverless
Suggerimento
Quando distribuisci un'API utilizzando il comando, 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 dotnet lambda deploy-serverlessserverless.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.
Implementazione di API ASP.NET minime su Lambda
Per distribuire un'API ASP.NET minima in Lambda, puoi utilizzare i modelli.NET Lambda per creare un nuovo progetto API minimale. 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 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