Funciones Serverless en C# en AWS Lambda: guía completa de la A a la Z

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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.Templates


Creación del proyecto

Cree una nueva función Lambda con el comando:

dotnet new lambda.EmptyFunction -n MyFirstLambda -o ./MyFirstLambdacd MyFirstLambda


La 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::FunctionHandler


Envie 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.APIGatewayEvents


Ejemplo 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";

//

Blogs

Book Recommendations