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

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: Por qué Serverless y C# son la pareja ideal

\n

La arquitectura serverless (o computación sin servidor) es un modelo en el que escribes código sin preocuparte por la gestión de servidores. AWS Lambda es uno de los servicios más populares para ejecutar dicho código. En combinación con C# (.NET), obtienes una herramienta potente, con seguridad de tipos y de alto rendimiento para crear microservicios, manejadores de API y tareas en segundo plano.

\n

En este artículo, recorreremos todo el camino: desde la configuración del entorno hasta el despliegue y monitoreo de tu primera función en C# en AWS Lambda. El material es adecuado tanto para principiantes como para desarrolladores experimentados que deseen sistematizar sus conocimientos.

\n\n

1. Preparación del entorno y creación del proyecto

\n

1.1 Instalación de herramientas

\n

Para trabajar con C# y AWS Lambda necesitarás:

\n
    \n
  • .NET SDK (8.0 o 6.0) — descárgalo desde dotnet.microsoft.com;
  • \n
  • AWS CLI — para gestionar recursos desde la terminal;
  • \n
  • Amazon.Lambda.Tools — herramienta global de .NET para el despliegue.
  • \n
\n

Instala Lambda Tools con un solo comando:

\n
dotnet tool install -g Amazon.Lambda.Tools
\n\n

1.2 Creación de la plantilla de función

\n

Usa la plantilla integrada para un inicio rápido:

\n
dotnet new lambda.EmptyFunction --name MyFirstLambda --profile default --region us-east-1
\n

Este comando creará un proyecto con el archivo Function.cs y aws-lambda-tools-defaults.json para la configuración del despliegue.

\n\n

2. Escritura del código de la función Serverless en C#

\n

2.1 Estructura básica de una función Lambda

\n

Cada función Lambda es un método que recibe un objeto de evento y un contexto de ejecución. Veamos un ejemplo sencillo:

\n
using Amazon.Lambda.Core;\nusing Amazon.Lambda.SQSEvents;\n\n[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]\n\npublic class Function\n{\n    public async Task<string> FunctionHandler(SQSEvent evnt, ILambdaContext context)\n    {\n        context.Logger.LogInformation("Mensajes recibidos: " + evnt.Records.Count);\n        \n        foreach (var record in evnt.Records)\n        {\n            await ProcessMessageAsync(record.Body, context);\n        }\n        \n        return "Procesados " + evnt.Records.Count + " mensajes";\n    }\n\n    private async Task ProcessMessageAsync(string messageBody, ILambdaContext context)\n    {\n        context.Logger.LogInformation("Procesando: " + messageBody);\n        await Task.Delay(100); // Simulación de trabajo\n    }\n}
\n

Observa el atributo LambdaSerializer — indica cómo serializar/deserializar JSON. Para C# se recomienda SystemTextJson.

\n\n

2.2 Trabajo con diferentes disparadores

\n

AWS Lambda admite múltiples fuentes de eventos. Aquí tienes un ejemplo para una solicitud HTTP a través de API Gateway:

\n
public async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context)\n{\n    var name = request.QueryStringParameters?.ContainsKey("name") == true \n        ? request.QueryStringParameters["name"] \n        : "mundo";\n    \n    var responseBody = $"¡Hola, {name}!";\n    \n    return new APIGatewayProxyResponse\n    {\n        StatusCode = 200,\n        Body = responseBody,\n        Headers = new Dictionary<string, string> { { "Content-Type", "text/plain" } }\n    };\n}
\n

Para trabajar con HTTP, necesitarás instalar el paquete Amazon.Lambda.APIGatewayEvents.

\n\n

3. Despliegue y prueba de la función

\n

3.1 Prueba local

\n

Antes del despliegue, verifica el código localmente con dotnet lambda invoke:

\n
dotnet lambda invoke --payload "{\\"Records\                

Blogs

Book Recommendations