.NET Workloads on AWS Lambda

MÓDULO 1

Módulo 1: Introducción a AWS Lambda

 MÓDULO DE APRENDIZAJE

Información general

En este tutorial, aprenderá a utilizar .NET con AWS Lambda. No se espera que tenga conocimientos previos de AWS Lambda, pero debe estar familiarizado con AWS y .NET. Durante este curso, aprenderá a crear, implementar, ejecutar, probar y depurar funciones de Lambda para .NET mediante la línea de comandos, Visual Studio, Visual Studio Code y Rider.

En este módulo introductorio, aprenderá qué es la computación sin servidor, sus beneficios y cómo se relaciona con AWS Lambda. A continuación, se muestran dos ejemplos de lo fácil que es comenzar a utilizar las funciones de AWS Lambda para .NET.

 Tiempo de realización

45 minutos

Computación sin servidor

Antes de hablar de la computación sin servidor, hablemos de la computación tradicional por un momento.

Muchas empresas, tanto pequeñas como grandes, utilizan servidores locales o servidores basados en centros de datos para ejecutar sus aplicaciones. Cuando estas empresas necesitan más servidores, tienen que comprarlos, instalarlos físicamente, configurarlos, protegerlos y mantenerlos. (En algunos casos, es posible que un centro de datos se encargue de instalarlos físicamente en su nombre, pero usted aún debe hacer el resto).

Una vez hecho todo esto, la empresa puede implementar sus aplicaciones en esos servidores. Para muchas empresas, esto puede llevar semanas o meses. Tradicionalmente, estos retrasos han dificultado el escalado de las aplicaciones.

La computación en la nube ha facilitado esto en gran medida. Una empresa puede lanzar una instancia de un servidor (o varias instancias) en cuestión de minutos. La empresa puede crear sus propias imágenes de máquina con la máquina virtual y el sistema operativo configurados de la manera que desee. Esto reduce la cantidad de configuración que se necesita una vez que se lanza el servidor, pero aún así deben mantenerlo actualizado con parches, actualizaciones de seguridad y actualizaciones de software, etc.

En muchos casos, estos servidores suelen funcionar las 24 horas del día, los 7 días de la semana, aunque no estén en uso todo este tiempo. Con frecuencia, los servidores se aprovisionan para gestionar los picos de carga de trabajo que la aplicación espera recibir. Sin embargo, fuera de este pico, los servidores están inactivos al menos parcialmente. Se pueden utilizar políticas de escalado adecuadas para reducir la ayuda con este problema, pero puede ser difícil hacerlo bien.

Además, el trabajo de aprovisionamiento y mantenimiento de los servidores y el tiempo que los servidores permanecen inactivos generan costos que no benefician directamente a la empresa.
Una alternativa a esto es la computación sin servidor. No hay servidores, no hay mantenimiento y usted se encarga del escalado. Usted escribe su código, lo implementa y deja que AWS se encargue de la infraestructura por usted.

AWS ofrece dos opciones de computación sin servidor: AWS Fargate para aplicaciones basadas en contenedores y AWS Lambda para aplicaciones basadas en eventos.

AWS Lambda

AWS Lambda es un servicio de computación sin servidor que ejecuta su código en respuesta a los eventos recibidos por el servicio. Otros servicios de AWS pueden generar eventos, como SNS, SQS, S3, DynamoDB, API Gateway, etc.

El uso de las URL de una función de Lambda o de API Gateway permite activar una función de Lambda para que se ejecute en respuesta a una solicitud HTTP. Las funciones de Lambda también se pueden invocar directamente, aunque esto también se considera un evento.

No necesita aprovisionar ninguna infraestructura para utilizar AWS Lambda. AWS también se encarga del escalamiento automático para satisfacer las necesidades de su aplicación, ya sean unas pocas ejecuciones por día o decenas de miles por segundo. La infraestructura de Lambda, administrada por AWS, es de alta disponibilidad y tolerante a errores.

Con las funciones de Lambda, solo paga por los recursos de computación que utiliza. Cuando el código no se está ejecutando, no paga.

Escribe sus aplicaciones .NET con los IDE con los que ya está familiarizado y, luego, con la ayuda de las herramientas de AWS (o una IaC de su elección), implementa su aplicación en AWS Lambda.

Cuando un evento invoca una función de Lambda, se crea un entorno de ejecución, se ejecuta el código de inicialización (constructores, etc.) y, a continuación, se ejecuta el código para gestionar el evento.

Una vez finalizada la ejecución, el entorno de ejecución permanece disponible para su reutilización durante un periodo de tiempo no determinista.

Si llega otro evento, se utiliza el mismo entorno de ejecución y el código de inicialización no se vuelve a ejecutar.

Si no hay ningún entorno de ejecución disponible, se crea uno nuevo y se vuelve a ejecutar el código de inicialización.

Actualmente, las funciones de AWS Lambda proporcionan versiones ejecutables administradas para .NET Core 3.1 y .NET 6. Si desea escribir aplicaciones en otras versiones de .NET, puede utilizar versiones ejecutables personalizadas de Lambda o una versión de la aplicación basada en contenedores.

AWS proporciona plantillas de proyectos de C# y F# para las funciones de Lambda. Se pueden utilizar desde la línea de comandos, Visual Studio, Visual Studio Code y Rider.

Puede ejecutar la función de Lambda para .NET en procesadores x86_64 y arm64. La elección de la arquitectura del procesador no afecta a la forma de escribir las aplicaciones. La implementación en el procesador de su elección es una simple cuestión de cambiar un único parámetro de configuración.

Características principales de AWS Lambda

No necesita aprender un lenguaje nuevo. Use sus conocimientos actuales de C# y F# para escribir sus funciones de Lambda.

Puede utilizar las funciones de Lambda con otros servicios de AWS, como SNS, SQS, S3, Step Functions y DynamoDB, para crear aplicaciones basadas en eventos. O bien, haga tareas personalizadas en respuesta a los eventos de estos servicios.

Si necesita organizar varias funciones de Lambda en ejecución, puede utilizar AWS Step Functions. Con Step Functions, crea una máquina de estados que gestiona la ejecución de sus funciones de Lambda.

No es necesario aprovisionar ni administrar infraestructura. AWS se encarga de todo esto. Solo tiene que decidir la arquitectura del procesador y la cantidad de memoria que se va a asignar a la función. En función de la memoria que elija, AWS elegirá la velocidad de CPU, el ancho de banda de la red y la E/S de disco adecuados.

Sus funciones de Lambda son de alta disponibilidad y tolerantes a errores, y se ejecutan en varias zonas de disponibilidad de cada región.

Las funciones de AWS Lambda comienzan a los pocos milisegundos de la llegada de un evento y pueden escalarse de forma rápida y automática para adaptarse al volumen de eventos entrantes.

Solo paga por lo que usa y esto se factura al milisegundo de uso.

Lambda tiene un nivel generoso y siempre gratuito, que le permite ejecutar un millón de solicitudes gratuitas al mes y 400 000 GB de tiempo de procesamiento al mes

Si tiene patrones de tráfico por ráfagas, Lambda escalará para satisfacer esas necesidades y, cuando el tráfico se reduzca, no tendrá que pagar por los recursos que ya no necesite.

Lambda forma parte de Savings Plans para computación, que ofrecen precios más bajos a cambio del compromiso de utilizar una cantidad determinada de tiempo de computación durante un periodo de uno a tres años.

En la siguiente sección, verá lo fácil que es comenzar a utilizar AWS Lambda. Con solo unos minutos de trabajo, dispondrá de dos funciones de AWS Lambda para .NET ejecutándose en la nube

Dos ejemplos de lo fácil que es comenzar a utilizar las funciones de AWS Lambda para .NET

Tiempo estimado: 30 minutos

Tenga en cuenta que puede seguir los ejemplos que se presentan aquí, pero no es necesario.

Si nunca ha trabajado con la tecnología sin servidor, puede parecer abrumador al principio. Incluso saber cómo empezar puede ser difícil de entender.

Al final de este breve módulo, tendrá dos funciones de Lambda para .NET en funcionamiento en AWS.

Uno la invoca desde la línea de comandos y la otra a través de un punto de conexión HTTPS público que configurará prácticamente sin esfuerzo.

Utilizará la línea de comandos para crear, compilar e implementar ambos ejemplos.

Requisitos previos

1. Una cuenta de AWS.

Si no tiene una cuenta de AWS, consulte esta página sobre cómo crear y activar una cuenta. Al crear una cuenta nueva, se activa automáticamente un nivel gratuito. El nivel gratuito ofrece el uso gratuito de ciertos servicios de AWS, con un límite cada uno. Obtenga más información sobre el nivel gratuito aquí.

2. Una AWS CLI instalada y configurada.

Si no tiene la AWS CLI, descárguela e instálela. A continuación, configure la AWS CLI con sus credenciales y su región predeterminada. La región predeterminada que elija dependerá de su ubicación geográfica y de los servicios de AWS que desee utilizar. La disponibilidad del servicio varía según la región.

El usuario de AWS debe tener adjunta la política AdministratorAccess; consulte la sección Nota sobre los permisos del módulo 3 para obtener más información.

3. El SDK de .NET 6

Si no tiene instalado el SDK de .NET 6, descárguelo e instálelo.

Obtenga las herramientas y plantillas

Un módulo posterior explicará más sobre las herramientas y plantillas disponibles, pero por ahora puede comenzar ejecutando los dos comandos siguientes:

dotnet tool install -g Amazon.Lambda.Tools
dotnet new -i Amazon.Lambda.Templates

Demo 1: La lección “Hello World!” de las funciones de Lambda

Esta es la función de Lambda más básica que puede escribir, que toma algunos datos y devuelve una respuesta, y la tendrá lista y funcionando en unos minutos.

Paso 1: Cree un proyecto de .NET

Desde la ventana de línea de comandos/terminal, ejecute el siguiente comando para crear una nueva función de Lambda.

dotnet new lambda.EmptyFunction -n HelloLambda

Paso 2: Implemente la función de Lambda

Cambie al directorio HelloLambda/src/HelloLambda:

cd HelloLambda/src/HelloLambda

Si está interesado, abra el proyecto en este directorio. Verá un archivo llamado Function.cs. Ahí es donde se encuentra el código que ejecuta su función. No cambie nada del archivo por ahora.

Desde la línea de comandos, ejecute el siguiente comando para implementar la función:

dotnet lambda deploy-function --function-name HelloLambda

Verá una salida similar a la siguiente.

El Kit de herramientas de AWS para Visual Studio no permite trabajar con su registro público de ECR ni habilitar características como el escaneo automático y el cifrado de repositorios para nuevos repositorios en su registro privado. Si necesita esas características, cree repositorios con la Consola de administración de AWS o herramientas de línea de comandos, como la AWS CLI y AWS Tools para PowerShell.

En este punto, ocurrirá una de dos cosas.

  1. Si no hay ningún rol en su cuenta de AWS, se le pedirá que “Introduzca el nombre del nuevo rol de IAM” y hágalo. Use el nombre HelloLambdaRole.
  2. Si hay roles en su cuenta de AWS, se le mostrará una lista, pero en la parte inferior aparecerá Crear un nuevo rol de IAM. Escriba el número asociado a ese rol. A continuación, se le pedirá que “Introduzca el nombre del nuevo rol de IAM”. Hágalo. Use el nombre HelloLambdaRole.

A continuación, verá una lista de permisos que se pueden adjuntar al rol que está creando. Elija AWSLambdaBasicExecutionRole. Es el número 6 de mi lista.

Espere unos segundos mientras se crean el rol, los permisos y la función de Lambda.

Paso 3: Invoque la función de Lambda

Desde la línea de comandos, ejecute:

dotnet lambda invoke-function --function-name HelloLambda --payload "Hello World!" 

En la salida verá:

¡Todo listo! ¡Acaba de implementar una función de Lambda en la nube!

Paso 4: Elimine los recursos

Con las funciones de Lambda, no se le cobra cuando no se están ejecutando; sin embargo, con otros servicios de AWS, se le cobrará incluso cuando el servicio esté inactivo. Siempre es una buena práctica eliminar los recursos que no se utilizan.

Ejecute el siguiente comando para eliminar la función de Lambda:

dotnet lambda delete-function --function-name HelloLambda 

Tenga en cuenta que esto no elimina el rol que creó, solo la función.

Demostración 2: una API .NET que se ejecuta en una función de Lambda

En esta demostración, creará una aplicación API .NET que gestiona las solicitudes HTTPS. Puede utilizar la plantilla de API mínima más reciente o la antigua plantilla de API completa con controladores; los pasos serán los mismos. Si está familiarizado con las instrucciones de nivel superior y los puntos de conexión de API .NET 6, considere la posibilidad de utilizar la plantilla mínima: serverless.AspNetCoreMinimalAPI. Si no está familiarizado con las instrucciones de nivel superior, utilice la plantilla anterior: serverless.AspNetCoreWebAPI.

Paso 1: Cree un proyecto de .NET

Si quiere utilizar la plantilla de API mínima, ejecute el siguiente comando:

dotnet new serverless.AspNetCoreMinimalAPI -n HelloLambdaAPI

Si está más familiarizado con la plantilla de API completa con controladores, ejecute el siguiente comando:

dotnet new serverless.AspNetCoreWebAPI -n HelloLambdaAPI

Paso 2: Cree un bucket de S3

Este es un paso puntual. El comando del paso 3 necesita un bucket de S3 para almacenar los archivos relacionados con la implementación.

Debe crear un nombre de bucket que sea único en todas las cuentas de AWS (no solo en la suya) y en todas las regiones.

Si usa us-east-1, ejecute el siguiente comando:

aws s3api create-bucket --bucket your-unique-bucket-name1234 

Si quiere usar una región diferente, ejecute:

aws s3api create-bucket --bucket your-unique-bucket-name1234 --create-bucket-configuration LocationConstraint=REGION

Si el nombre del bucket que seleccionó está en uso, recibirá el siguiente error:

Se produjo un error (BucketAlreadyExists) al llamar a la operación CreateBucket: el nombre del bucket solicitado no está disponible. Todos los usuarios del sistema comparten el espacio de nombres del bucket. Seleccione otro nombre e inténtelo de nuevo.

Paso 3: Implemente la función de Lambda

Cambie al directorio HelloLambdaAPI/src/HelloLambdaAPI.

Desde la línea de comandos, ejecute el siguiente comando para implementar la función:

dotnet lambda deploy-serverless --stack-name HelloLambdaAPI --s3-bucket your-unique-bucket-name1234

Siéntese y espere.

Verá algunos resultados relacionados con el proceso de creación e implementación y, al final, habrá un enlace:

Output Name                    Value
------------------------------ --------------------------------------------------
ApiURL                         https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/Prod/

Ábralo en un navegador. En función de la plantilla de proyecto que haya elegido, verá uno de los mensajes siguientes:

Paso 4: Elimine los recursos

Para eliminar la función de Lambda y los recursos asociados, ejecute el siguiente comando:

dotnet lambda delete-serverless HelloLambdaAPI

Conclusión

Ahí lo tiene. En solo unos minutos, desplegó dos funciones de Lambda. Así de fácil es empezar a utilizar las funciones de Lambda para .NET.

¿Le resultó útil esta página?

HERRAMIENTAS PARA EL DESARROLLO DE .NET