Suma de Likes Asíncrona con AWS Lambda y SQS

Clase 18 de 24Curso Avanzado de Serverless Framework en AWS

Resumen

¿Cómo implementar asincronismo con AWS Lambda para mejorar el rendimiento de tus aplicaciones?

Integrar asincronismo en tus aplicaciones mejora significativamente su rendimiento, especialmente en tareas intensivas como la actualización de bases de datos. En este caso de uso, aprenderemos cómo sumar "likes" asincrónicamente a usuarios en una aplicación, utilizando servicios de AWS, tales como API Gateway, SQS y Lambda.

¿Cuál es el flujo arquitectónico de la aplicación?

Para no saturar las bases de datos y respetar los límites de Lambda, utilizaremos una arquitectura enfocada en servicios asincrónicos. Aquí está cómo se estructura:

  1. API Gateway: Este endpoint recibe la petición desde el cliente con el ID del usuario al que se le sumarán los likes.
  2. SQS (Simple Queue Service): Almacena de manera temporal las peticiones en una cola, garantizando que los datos sean procesados sin perderse.
  3. Lambda: Será configurada para procesar las solicitudes de la cola de SQS, asegurando que sólo una instancia de Lambda esté activa al tiempo.

La conexión es directa desde API Gateway a SQS, sin pasar por una Lambda intermedia, optimizando el flujo de datos y protegiendo tu base de datos para que no se sobrecargue.

¿Cómo configurar plugins para optimizar la conexión API Gateway- SQS?

Gracias a la flexibilidad del framework serverless, se pueden usar plugins disponibles que facilitan el uso de AWS. Para conectar API Gateway a SQS:

  1. Buscar el plugin adecuado que permita las conexiones necesarias. Un ejemplo es un plugin capaz de interactuar con cualquier recurso de Amazon, pero en este caso busca explícitamente SQS.

  2. Instalación del plugin: Se realiza instalando la dependencia desde la terminal y configurando el archivo serverless.yml:

    plugins:
      - serverless-apigateway-service-proxy
    
    custom:
      apiGatewayServiceProxies:
        - sqs:
            path: /like
            method: post
            queueName: likeQueue
            cors: true
            responseMessage: "Success"
    
  3. Plugins adicionales: Considera el plugin Lift que permite crear colas y asignar Lambdas sin necesidad de escribir mucho código. Incluye configuraciones como batch size para controlar cuántos mensajes procesa la Lambda simultáneamente.

¿Cómo crear y configurar la Lambda Worker?

La Lambda Worker es responsable de procesar las peticiones almacenadas en la cola. Aquí te mostramos los pasos esenciales:

  1. Crear el handler: Define una función en un archivo handler.js dentro de una carpeta dedicada, por ejemplo:

    module.exports.handler = async (event) => {
      console.log(event);
      // Lógica para sumar likes vendrá después
    };
    
  2. Configurar el worker en serverless.yml: Aquí es donde se define la función Lambda, su handler y otras configuraciones necesarias:

    constructs:
      likeQueue:
        type: queue
        batchSize: 1
        worker:
          handler: likeUser/handler.handler
          package:
            exclude:
              - '**'
            include:
              - likeUser/** 
          reservedConcurrency: 1
    
  3. Deploy de la aplicación: Usa comandos de serverless framework para implementar y verificar los cambios.

¿Cómo probar el sistema asincrónico?

Después de haber configurado e implementado la arquitectura, es crucial probarla para verificar su correcto funcionamiento:

  1. Enviar una petición POST a través de Postman con el body requerido, asegurándote que el endpoint API Gateway responde correctamente.

  2. Comprobar logs de la Lambda Worker para asegurarte de que está procesando los mensajes. Utiliza la línea de comando de serverless framework para ver directamente los logs.

Con esta aplicación, serás capaz de manejar procesos asincrónicos de manera efectiva, optimizando tiempos de respuesta y asegurando la consistencia de tu aplicación. ¡Sigue explorando y aprendiendo sobre más funcionalidades avanzadas!