Serverless funciones en C#: Guía completa de AWS Lambda con .NET
La arquitectura Serverless se está convirtiendo en un estándar para las aplicaciones modernas. AWS Lambda es uno de los servicios más populares para ejecutar código sin gestionar servidores. En este artículo, analizaremos cómo crear funciones serverless en C# utilizando .NET 6/8, configurar el entorno, escribir código eficiente y desplegarlo en la nube.
¿Qué es AWS Lambda y por qué C#?
AWS Lambda es un servicio informático que ejecuta tu código en respuesta a eventos y gestiona automáticamente los recursos informáticos. C# con .NET es una excelente opción para Lambda gracias a:
- Alto rendimiento — .NET 6+ proporciona un arranque en frío rápido (alrededor de 200-500 ms).
- Sintaxis familiar — si ya escribes en C#, la barrera de entrada es mínima.
- Ecosistema rico — todas las bibliotecas de NuGet están disponibles.
- Integración con AWS — el SDK para .NET permite trabajar fácilmente con S3, DynamoDB, SQS y otros servicios.
Las funciones serverless en C# son ideales para el procesamiento de archivos, API REST (a través de API Gateway), procesos ETL y microservicios.
Configuración del proyecto para AWS Lambda en C#
Para empezar, necesitarás:
- .NET SDK 6.0 o superior
- Una cuenta de AWS
- AWS CLI (recomendado)
- La herramienta
dotnet lambda(se instala mediantedotnet tool install -g Amazon.Lambda.Tools)
Creemos un nuevo proyecto:
dotnet new lambda.EmptyFunction --name MyFirstLambdacd MyFirstLambdaLa estructura del proyecto incluye:
Function.cs— archivo principal con la lógica.aws-lambda-tools-defaults.json— configuración de despliegue.MyFirstLambda.csproj— archivo del proyecto con los paquetes necesarios.
Asegúrate de que .csproj tenga referencias a los paquetes:
<PackageReference Include="Amazon.Lambda.Core" Version="2.2.0" /><PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.3.1" />Escribiendo la primera función serverless en C#
Abramos Function.cs y escribamos un manejador simple que reciba un nombre y devuelva un saludo:
using Amazon.Lambda.Core;using Amazon.Lambda.Serialization.SystemTextJson;
[assembly: LambdaSerializer(typeof(DefaultLambdaJsonSerializer))]
public class Function{ public string FunctionHandler(Input input, ILambdaContext context) { context.Logger.LogInformation($"Procesando solicitud para: {input.Name}"); return $"¡Hola, {input.Name}! Hora: {DateTime.UtcNow}"; }}
public class Input{ public string Name { get; set; }}Analicemos los puntos clave:
LambdaSerializer— indica cómo serializar/deserializar JSON.SystemTextJsones una opción rápida y moderna.ILambdaContext— proporciona información sobre la invocación actual: tiempo restante, registrador, ID de solicitud.Input— una clase POCO simple para los datos de entrada.
Para pruebas locales, utiliza:
dotnet lambda invoke-function MyFirstLambda --payload "{\\"Name\\": \\"Mundo\\"}"Trabajando con servicios de AWS desde Lambda
El verdadero poder de las funciones serverless en C# se manifiesta al integrarse con otros servicios. Veamos un ejemplo de carga de un archivo a S3:
using Amazon.S3;using Amazon.S3.Model;using Amazon.Lambda.Core;
public class S3Function{ private readonly IAmazonS3 _s3Client; public S3Function() { _s3Client = new AmazonS3Client(); // utiliza el rol IAM de Lambda }