El reciente evolución de .NETO Ha sido divertido de ver. Desde que .NET se convirtió en una plataforma de código abierto, finalmente ha cumplido su promesa multiplataforma. Al mismo tiempo, el apoyo a linux le ha dado más tracción en el nativo de la nube espacio, con los últimos lanzamientos compatibles envase tiempos de ejecución.
Tener capacidades multiplataforma significa que también puedes ejecutar .NET en cualquier nube. Todo lo que necesita es un host de máquina virtual Linux compatible o una instancia de Kubernetes que admita contenedores sin distribución. Eso es suficiente para ejecutar código .NET en plataformas de infraestructura como servicio, como AWS, o en plataformas administradas. Kubernetes como Google Kubernetes Engine (GKE). El código puede migrar de una plataforma a otra, utilizando DESCANSAR API para acceder a los servicios de la plataforma. En algunos casos, existen SDK, ya sea del proveedor de la plataforma o desarrollados por la comunidad.
Una portabilidad como esta es algo bueno: le permite pasar de una nube a otra, con cambios mínimos en su código (especialmente si no está utilizando ninguna aplicación específica de servicio). Pero existen limitaciones, ya que no puedes aprovecharlas. sin servidor características de la plataforma que le permiten aprovechar la escalabilidad de la nube y los beneficios económicos que conllevan las operaciones bajo demanda. Sin ellos, simplemente está levantando y cambiando el código .NET local.
Usando C# en AWS Lambda
Si utiliza AWS Lambda para sus aplicaciones sin servidor, ha tenido la opción de usar .NET con C# desde hace algún tiempo, junto javascript, Ir, Pitón, Java, Rubí, ÓxidoPowerShell y Mecanografiado. El soporte de Amazon comenzó con .NET Core y se ha actualizado con sucesivos lanzamientos de la plataforma. Actualmente hay soporte para .NET 6 y .NET 7. Lo más probable es que desees use .NET 6 por ahoracomo .NET 7 sólo está disponible para contenedores alojados.
Muy parecido Funciones de Azure, AWS Lambda es una plataforma informática sin servidor creada en torno a operaciones basadas en eventos. Las funciones Lambda se activan mediante eventos, a menudo de otros servicios de AWS, y se pueden usar para procesamiento de datos, procesamiento de transmisiones, backends controlados por API para aplicaciones web y móviles y para admitir implementaciones de IoT (Internet de las cosas), entre muchas opciones diferentes. .
El aspecto más importante de AWS Lambda es que, al igual que Azure Functions, no tiene control sobre los recursos informáticos que utiliza. El servicio se escala según la demanda y usted paga por los recursos que consume.
Creación de funciones Lambda en .NET
Usando .NET con AWS Lambda no requiere cambios en su caja de herramientas de desarrollo. Puedes usar Estudio visual, Código de estudio visual, o cualquier IDE de terceros. Todo lo que necesita hacer es instalar un conjunto de plantillas de AWS desde NuGet a través de la CLI de .NET.
En el corazón de las funciones C# de AWS se encuentra un controlador de función Lambda. Este método es lo que invoca el servicio subyacente para iniciar su código. Es un componente esencial de una función Lambda, que ofrece tanto un evento y un objeto de contexto para su código. El objeto de evento es probablemente el más útil, ya que proporciona información sobre el evento, mientras que el objeto de contexto proporciona información sobre el entorno de ejecución. Los datos deberán serializarse como un JSON objeto listo para usar en su código.
Comprender el objeto de contexto es importante para garantizar que su código C# se ejecute bien. La información importante sobre el tiempo de ejecución que proporciona incluye la cantidad de tiempo disponible antes de que una función expire y AWS recupere sus recursos. Puede utilizar esta información para escribir controles de manejo de errores adecuados, cancelar tareas y enviar notificaciones si está a punto de activarse un tiempo de espera.
El código C# en AWS Lambda se llama de dos maneras. La primera opción es proporcionar una función como biblioteca de clases, configurando el servicio con sus nombres de clase y ensamblado, y el método que se llamará cuando se active la función. La segunda opción es proporcionar un ensamblado ejecutable que se ejecutará cuando se invoque.
Simplificando el desarrollo de funciones de C# con anotaciones Lambda
Amazon proporciona funciones adicionales que pueden simplificar la escritura de una función de C#. El Marco de anotaciones Lambda es una forma de ocultar gran parte del código específico de Lambda de su lógica empresarial, utilizando generadores de código fuente para crearlo a partir de una ruta de API REST y, al mismo tiempo, construyendo los controladores Lambda adecuados. Puede encontrar una plantilla para crear un proyecto de Annotations Framework en el Kit de herramientas de AWS para Visual Studiocomo parte de los planos incluidos.
Debido a que Annotations Framework puede establecer propiedades de Lambda mediante programación, puede agregar tiempos de espera y límites de memoria como parte de la definición de función inicial. Una vez que su código esté listo, simplemente compílelo e impleméntelo directamente en AWS desde Visual Studio.
Una opción con las funciones basadas en .NET 7 es Utilice la compilación AOT (antes de tiempo) para reducir los tiempos de inicio.. Como AOT necesita ejecutarse en el entorno de destino, está compilando código en un contenedor de Amazon Linux, utilizando Docker como host. Es un proceso relativamente simple, mediante el cual se utiliza la CLI de .NET y la plantilla Lambda para descargar la imagen de Linux. La compilación se ejecuta automáticamente como parte de la implementación de su código en AWS.
No está limitado a aplicaciones C# independientes. Lambda se puede utilizar para alojar y ejecutar Aplicaciones web ASP.NET Core Además, le brinda un back-end bajo demanda para sitios que tienen un uso relativamente bajo o que necesitan responder a demandas ráfagas.
Usando .NET 8 en AWS Lambda
Amazon está trabajando para brindar soporte .NET 8 para hosts AWS Lambda, y el lanzamiento final estará disponible pronto. como el Notas de problemas de GitHub, hay muchas partes móviles que deben unirse para ofrecer una versión estable a largo plazo de un tiempo de ejecución administrado. Además de crear un nuevo host basado en las últimas versiones de la distribución interna de Linux de Amazon, el equipo .NET de AWS también está desarrollando y probando un conjunto actualizado de API .NET y herramientas CLI para ayudar a crear nuevos Lambdas y actualizar el código existente.
Ese último punto es importante, ya que AWS planea comenzar a dejar de ser compatible con .NET 6 y .NET 7 en 2024, con un límite estricto para la actualización de las funciones de .NET 6 en febrero de 2025. Migrar a la versión de soporte a largo plazo de .NET ayudará a garantizar que su código siga siendo compatible tanto con Microsoft como con Amazon. Algunas herramientas ya están disponibles, incluida una actualización del kit de herramientas de AWS para Visual Studio, que le permite crear plantillas de tiempo de ejecución personalizadas basadas en .NET 8 y compatibilidad con una imagen base de contenedor .NET 8.
Si planea utilizar esta imagen base de Amazon Linux 3, deberá clonar el repositorio GitHub de AWS .NET y crear la imagen en sus propios sistemas de desarrollo (consulte esta publicación de blog). Esto le permitirá probar el código antes de empaquetarlo e implementarlo en AWS. Cuando AWS finalice sus herramientas .NET 8, pasarán a formar parte de la plataforma y podrá utilizarlas como parte de su proceso de compilación estándar.
La compatibilidad con .NET en AWS AWS Lamba hace que sus habilidades en .NET sean portátiles más allá del desarrollo de aplicaciones tradicionales y de las plataformas nativas de la nube de Azure. Es importante tener en cuenta que este no es un proyecto único, sino a largo plazo que ha pasado por múltiples actualizaciones del tiempo de ejecución subyacente, en línea con el propio ciclo de vida de soporte de .NET. Con un conjunto eficaz de abstracciones que facilitan la concentración en el código, AWS ofrece un enfoque que debería simplificar la transferencia de código .NET sin servidor desde otras plataformas en la nube, así como desde aplicaciones locales.
Copyright © 2024 IDG Communications, Inc.