Optimización de Lambda con Layers en AWS y Serverless Framework

Clase 11 de 24Curso Avanzado de Serverless Framework en AWS

Resumen

¿Cómo optimizar peso usando Lambda Layers en AWS S3?

La optimización de recursos en AWS es crucial para mejorar el rendimiento y reducir costos, especialmente al trabajar con funciones Lambda. En esta sesión, abordaremos cómo emplear Lambda Layers para optimizar el peso de los microservicios en Amazon Web Services, específicamente utilizando Node.js. A través de esta técnica, podemos minimizar la carga de dependencias en nuestras funciones Lambda, asegurando eficacia y funcionalidad sin comprometer la calidad del servicio.

¿Cómo definir eventos S3 eficientemente?

  • Identificación de prefijos específicos: Es vital definir nuestras reglas de eventos S3 para activar cuando los archivos sean cargados en carpetas particulares, como Upload. Esto asegura que nuestras funciones solo se activen cuando y donde lo necesitamos.
  • Comprobación de la compilación: Al crear o modificar eventos, siempre es recomendable validar que la configuración funciona correctamente antes de implementar cambios en producción.

¿Qué es una Lambda Layer y por qué usarla?

Una Lambda Layer es un recurso en AWS que nos permite compartir librerías, configuraciones o cualquier contenido entre varias funciones Lambda. Veamos por qué es beneficioso:

  • Reducción del tamaño de implementación: Al trasladar las dependencias a una Layer, reducimos el tamaño del paquete de implementación de nuestro servicio Lambda.
  • Reutilización: Facilita compartir librerías entre diferentes funciones Lambda, evitando redundancias.
  • Actualización centralizada: Permite actualizar una sola vez las dependencias y reflejar estos cambios en todas las funciones relacionadas.

Creación de una Lambda Layer paso a paso

Vamos a detallar el proceso de creación de una Lambda Layer con Node.js y el uso de AWS CLI.

  1. Estructura de directorios:

    • Colocamos las dependencias de Node.js en nodejs/node_modules.
  2. Comandos necesarios:

    • Usamos Bash Scripting para instalar y mover dependencias.
    npm install --only=prod
    mkdir -p nodejs
    mv node_modules nodejs/
    
  3. Compresión a ZIP:

    • Comprimimos todo en un archivo .zip para su carga.
    zip -r nodejs.zip nodejs
    
  4. Publicar la Layer en AWS:

    • Usamos el CLI de AWS para subir y publicar la Layer.
    aws lambda publish-layer-version --layer-name my-first-layer --zip-file fileb://nodejs.zip --compatible-runtimes nodejs14.x
    

Integración de Lambda Layers con Serverless Framework

Para quienes gestionan sus proyectos con Serverless Framework, integrar las Layers es un proceso que puede simplificarse:

  • Declaración en serverless.yaml:

    • Añadir la sección layers especificando compatibilidades de runtime.
    layers:
      base:
        path: nodejs.zip
        compatibleRuntimes:
          - nodejs14.x 
    
  • Referencias a Layers en funciones Lambda:

    • Se puede definir el uso de Layers dentro de cada función.
    functions:
      myFunction:
        handler: handler.myHandler
        layers:
          - { Ref: MyLayer }
    

Validación y pruebas finales

Después de implementar Layers, es esencial validar que todo funciona correctamente:

  1. Pruebas en entorno de desarrollo: Generar URLs firmadas y cargar archivos, asegurando que se crean y visualizan en diferentes tamaños.
  2. Revisión en consola de AWS: Corroborar desde la consola que las funciones están usando la Layer adecuada.

¿Cómo automatizar la creación de Layers con GitHub Actions?

Aunque el proceso manual nos ofrece control detallado, la automatización nos permite agilizar el flujo de trabajo y minimizar errores humanos. En próximas clases, exploraremos cómo emplear GitHub Actions para automatizar completamente la creación y publicación de Lambda Layers en AWS.

Este enfoque no solo optimiza recursos, sino también tiempos de desarrollo y mantenimiento, permitiendo al personal técnico centrarse en tareas más complejas e innovadoras. ¡Sigue adelante y no pierdas la oportunidad de profundizar en estas buenas prácticas para Cloud Computing!