Tecnología

Cómo ejecutar una API web ASP.NET en AWS con Lambda y API Gateway – CloudSavvy IT

Cómo ejecutar una API web ASP.NET en AWS con Lambda y API Gateway - CloudSavvy IT

logotipo de lambda

AWS Lambda es una plataforma sin servidor para ejecutar código sin administrar el hardware subyacente. Es muy flexible y puede ejecutar muchas cargas de trabajo diferentes, incluidas las API completas de C # mediante ASP.NET Core.

Espera, ¿puedes hacer esto en Lambda?

¡Sí! No solo puede ejecutar funciones basadas en tiempos de ejecución .NET, puede responder a las solicitudes utilizando todas las herramientas que le proporciona ASP.NET. Puede crear API que se comuniquen con bases de datos, como la base de datos RDS administrada de AWS, todo mientras se ejecuta perfectamente en funciones sin servidor.

Si bien se sabe que las versiones anteriores de ASP.NET se ejecutan en .NET Framework (el tiempo de ejecución más antiguo solo para Windows) son voluminosas, la nueva pila de ASP.NET Core que se ejecuta en .NET Core 3.1 y la nueva .NET 5 se han vuelto importantes Mejoras en el uso de memoria y rendimiento.

Normalmente, esto no sería posible, ya que ASP.NET usa su propio servidor web HTTP llamado Kestrel para responder a las solicitudes, lo que no funcionaría ya que es manejado por el tiempo de ejecución de Lambda. Sin embargo, AWS ha proporcionado una solución ingeniosa para esto; Tradicionalmente, una configuración de ASP.NET generalmente involucra su servidor web Kestrel detrás de IIS o NGINX. Esto habla con el marco ASP.NET para manejar solicitudes.

AWS ha creado una clase de proxy, Amazon.Lambda.AspNetCoreServer, que se encarga de todo frente a ASP.NET. Esto le permite reutilizar la mayor parte de su código mientras conecta su API a Lambda.

Esto significa que necesitará utilizar API Gateway, pero eso no es malo, ya que API Gateway es muy útil para administrar su API. Le permite definir estrictamente todas las reglas que hacen que su API funcione; por supuesto, necesitará tener su aplicación ASP.NET configurada para manejar todas las solicitudes de API Gateway.

Sin embargo, esta no será la mejor experiencia en términos de tiempo de inicio. En comparación con los lenguajes de scripting ligeros como JavaScript y Python, los paquetes .NET tienen mucha más sobrecarga. Existen algunos trucos que puedes hacer para acelerar el rendimiento, e incluso pague con capacidad aprovisionada. De lo contrario, debe estar preparado para tiempos de inicio en frío de entre 1 y 2 segundos.

Esto no significa que cada ejecución vaya a tardar 2 segundos en cargar la página. Una vez que ocurre la primera carga, todo se inicializa y se mantiene “caliente” en Lambda durante 5 minutos. Si alguien más lo solicita, la función manejará la solicitud como lo haría normalmente en un servidor real.

Configuración de ASP.NET

AWS incluye un generador para proyectos ASP.NET Lambda que está preconfigurado con el código estándar y la implementación en CloudFormation. Le recomendamos que comience aquí, pruebe las cosas y luego mueva su código API, pero si deseas insertarlo en un proyecto existente, AWS también tiene una guía para eso.

Necesitará tener instalada la extensión AWS Toolkit for Visual Studio, que puede administrar desde “Extensiones” en la barra de menú. Esto es lo que contiene las plantillas de proyecto para aplicaciones de AWS.

Desde la pantalla de presentación principal de Visual Studio, cree un nuevo proyecto:

Probablemente desee poner esto en su propia solución, así que seleccione “Solución en blanco” en “Otro”.

Luego, puede hacer clic con el botón derecho en el panel de archivos para agregar un nuevo proyecto y seleccionar “Aplicación sin servidor de AWS” o “Aplicación sin servidor de AWS con pruebas”, lo que prefiera.

Asegúrese de que esté en C #, a menos que desees usar F # por algún motivo.

También tenga en cuenta que este es un proyecto de “Aplicación sin servidor”, que administra todos los recursos a través del servicio de infraestructura como código de AWS, CloudFormation. Si solo desea crear algunas funciones de Lambda, también hay un proyecto para eso.

Se le llevará a un submenú donde puede elegir qué tipo de plano desea construir. Seleccione “ASP.NET Core Web API” y cree el proyecto.

En su mayor parte, esto se configura como un proyecto ASP.NET estándar. La principal diferencia es que el tradicional Program.cs es reemplazado por LambdaEntryPoint.cs como el punto de entrada principal, y contiene la clase shim que conecta el código de AWS con el de ASP.NET IWebHostBuilder, que se utiliza para iniciar la aplicación.

Una vez que todo esté en funcionamiento, deberá copiar sus controladores, modelos y servicios, y reemplazar Startup.cs con su configuración.

Usando su API

Para implementar este proyecto, AWS incluye opciones de publicación integradas mediante la extensión del kit de herramientas de AWS. Haga clic con el botón derecho en su proyecto y seleccione “Publicar en AWS Lambda …”

Deberá darle un depósito para cargar y establecer un nombre para la implementación de CloudFormation.

Tardará un segundo en cargar y publicar, pero luego podrá ir a la Consola de administración de AWS Lambda para ver su función. Tendrá un nombre generado automáticamente utilizando el nombre de la pila de CloudFormation como prefijo.

En Configuración> Desencadenadores, puede ver todos los desencadenadores de API Gateway que llaman a esta función y probarlo usted mismo utilizando el punto final.

También puede ver la pila completa de CloudFormation que se crea automáticamente usando su configuración.

Si deseas cambiarlo, deberá editar el serverless.template en su proyecto. Para obtener más información, puede consultar nuestra guía sobre el uso de AWS CloudFormation.

RELACIONADOS: Codifique su infraestructura de AWS con CloudFormation

Leave a Comment

You may also like

Más