Implementación de aplicaciones ASP .NET - AWS Lambda

Implementación de aplicaciones ASP .NET

Además de alojar funciones basadas en eventos, también puede utilizar .NET con Lambda para alojar aplicaciones ASP .NET ligeras. Puede crear e implementar aplicaciones ASP .NET mediante el paquete NuGet Amazon.Lambda.AspNetCoreServer. En esta sección, aprenderá a implementar una API web de ASP .NET en Lambda mediante las herramientas de CLI de Lambda .NET.

Requisitos previos

SDK para .NET 8

Instale el SDK de .NET 8 y el tiempo de ejecución de ASP .NET Core.

Amazon.Lambda.Tools

Para crear sus funciones de Lambda, utilice la extensión de herramientas globales de .NET Amazon.Lambda.Tools. Ejecute el siguiente comando para instalar Amazon.Lambda.Tools:

dotnet tool install -g Amazon.Lambda.Tools

Para obtener más información sobre la Amazon.Lambda.Tools de la extensión de la CLI de .NET, consulte el repositorio en GitHub Extensiones de AWS para la CLI de .NET.

Amazon.Lambda.Templates

Para generar el código de la función de Lambda, utilice el paquete NuGet Amazon.Lambda.Templates. Para instalar este paquete de plantillas, ejecute el siguiente comando:

dotnet new --install Amazon.Lambda.Templates

Implementación de una API web de ASP.NET en Lambda

Para implementar una API web mediante ASP .NET, puede usar las plantillas .NET Lambda para crear un nuevo proyecto de API web. Utilice el siguiente comando para inicializar un nuevo proyecto de API web de ASP .NET. En el comando de ejemplo, asignamos un nombre al proyecto AspNetOnLambda.

dotnet new serverless.AspNetCoreWebAPI -n AspNetOnLambda

Este comando crea los siguientes archivos y directorios en el directorio de su proyecto.

. └── 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

Cuando Lambda invoca la función, el punto de entrada que utiliza es el archivo LambdaEntryPoint.cs. El archivo creado por la plantilla Lambda de .NET contiene el siguiente código.

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

El punto de entrada utilizado por Lambda debe heredar de una de las tres clases base del paquete Amazon.Lambda.AspNetCoreServer. Estas tres clases base son:

  • APIGatewayProxyFunction

  • APIGatewayHttpApiV2ProxyFunction

  • ApplicationLoadBalancerFunction

La clase predeterminada que se utiliza al crear el archivo LambdaEntryPoint.cs con la plantilla .NET Lambda proporcionada es APIGatewayProxyFunction. La clase base que utilice en la función depende de la capa de API situada delante de la función de Lambda.

Cada una de las tres clases base contiene un método público denominado FunctionHandlerAsync. El nombre de este método formará parte de la cadena de controladores que Lambda utiliza para invocar la función. El método FunctionHandlerAsync transforma la carga útil del evento entrante en el formato de ASP .NET correcto y la respuesta de ASP .NET en una carga útil de respuesta de Lambda. Para el proyecto AspNetOnLambda de ejemplo que se muestra, la cadena del controlador sería la siguiente.

AspNetOnLambda::AspNetOnLambda.LambdaEntryPoint::FunctionHandlerAsync

Para implementar la API en Lambda, ejecute los siguientes comandos para navegar al directorio que contiene el archivo de código fuente e implementar la función mediante AWS CloudFormation.

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

Al implementar una API mediante el comando dotnet lambda deploy-serverless, AWS CloudFormation asigna un nombre a la función de Lambda según el nombre de pila que especifique durante la implementación. Para asignar un nombre personalizado a la función de Lambda, edite el archivo serverless.template para agregar una propiedad FunctionName al recurso AWS::Serverless::Function. Para obtener más información, consulte Tipo de nombre en la Guía del usuario de AWS CloudFormation.

Implementación de API mínimas de ASP .NET en Lambda

Para implementar una API mínima de ASP .NET en Lambda, puede usar las plantillas Lambda .NET para crear un nuevo proyecto de API mínima. Use el siguiente comando para inicializar un nuevo proyecto de API mínima. En este ejemplo, usamos el nombre de proyecto MinimalApiOnLambda.

dotnet new serverless.AspNetCoreMinimalAPI -n MinimalApiOnLambda

El comando crea los siguientes archivos y directorios en el directorio de su proyecto.

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

El archivo Program.cs contiene la salida siguiente.

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();

Para configurar su API mínima para que se ejecute en Lambda, es posible que necesite editar este código para que las solicitudes y respuestas entre Lambda y ASP .NET Core se traduzcan correctamente. De forma predeterminada, la función está configurada para una fuente de eventos de la API de REST. En el caso de una API HTTP o un equilibrador de carga de aplicación, sustituya (LambdaEventSource.RestApi) por una de las siguientes opciones:

  • (LambdaEventSource.HttpAPi)

  • (LambdaEventSource.ApplicationLoadBalancer)

Para implementar su API mínima en Lambda, ejecute los siguientes comandos para navegar al directorio que contiene el archivo de código fuente e implementar la función mediante AWS CloudFormation.

cd MinimalApiOnLambda/src/MinimalApiOnLambda dotnet lambda deploy-serverless