Introducción a Serverless y AWS Lambda en C#
La arquitectura Serverless (computación sin servidor) es un modelo de desarrollo en el que el desarrollador se centra exclusivamente en el código de la lógica de negocio, mientras que el proveedor de la nube gestiona la infraestructura (servidores, escalado, monitoreo). AWS Lambda es uno de los servicios más populares para implementar funciones serverless y es compatible con el ecosistema .NET.
En este artículo, analizaremos el ciclo completo de trabajo con AWS Lambda en C#: desde la creación del proyecto hasta el despliegue y la depuración. Aprenderá a configurar el entorno, escribir una función eficiente, manejar eventos y evitar errores típicos. El material está dirigido a desarrolladores de C# que deseen dominar el enfoque serverless en Amazon Web Services.
1. Configuración del entorno y creación del primer proyecto
Instalación de herramientas
Para trabajar con AWS Lambda en C#, necesitará:
- .NET SDK versión 6.0 o 8.0 (se recomienda la última versión LTS).
- AWS CLI: interfaz de línea de comandos para gestionar los servicios de AWS.
- Amazon.Lambda.Templates: conjunto de plantillas para .NET CLI.
- Docker Desktop (opcional): para pruebas locales con emulación de Lambda.
Instale las plantillas de Lambda a través del terminal:
dotnet new -i Amazon.Lambda.TemplatesCreación del proyecto
Cree una nueva función Lambda con el comando:
dotnet new lambda.EmptyFunction -n MyFirstLambda -o ./MyFirstLambdacd MyFirstLambdaLa estructura del proyecto incluye el archivo Function.cs con la clase base Function y un método controlador. Por defecto, se utiliza una plantilla para una función simple que recibe una cadena y devuelve una cadena.
Abra Function.cs y modifíquelo de la siguiente manera:
using Amazon.Lambda.Core;using Amazon.Lambda.Serialization.SystemTextJson;
[assembly: LambdaSerializer(typeof(DefaultLambdaJsonSerializer))]
public class Function{ public string FunctionHandler(string input, ILambdaContext context) { context.Logger.LogInformation($"Entrada recibida: {input}"); return $"¡Hola, {input}! Su función se ejecutó correctamente."; }}Pruebas locales
Para ejecutar la función localmente, use la utilidad dotnet lambda invoke o el emulador Lambda Runtime Interface Emulator (RIE) en Docker. Ejemplo con RIE:
docker run --rm -v "$PWD/bin/Release/net8.0/publish":/var/task:ro,delegated \ -p 9000:8080 \ public.ecr.aws/lambda/dotnet8:latest \ MyFirstLambda::MyFirstLambda.Function::FunctionHandlerEnvie una solicitud de prueba con curl:
curl -X POST "http://localhost:9000/2015-03-31/functions/function/invocations" \ -d '"Mundo"'2. Manejo de diferentes tipos de eventos
Trabajo con API Gateway (solicitudes HTTP)
Lambda se usa a menudo como backend para APIs REST a través de Amazon API Gateway. En este caso, el controlador recibe un objeto APIGatewayProxyRequest y devuelve un APIGatewayProxyResponse.
Instale el paquete NuGet:
dotnet add package Amazon.Lambda.APIGatewayEventsEjemplo de función controladora de solicitud HTTP POST:
using Amazon.Lambda.APIGatewayEvents;using System.Text.Json;
public class Function{ public async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context) { context.Logger.LogInformation($"Solicitud recibida: {request.HttpMethod} {request.Path}");
// Análisis del cuerpo de la solicitud var body = JsonSerializer.Deserialize<Dictionary<string, string>>(request.Body); var name = body?.GetValueOrDefault("name") ?? "Invitado";
//