Procesador de Imágenes Asíncrono con AWS Lambda y S3
Clase 10 de 24 • Curso Avanzado de Serverless Framework en AWS
Resumen
¿Qué es un procesador de imágenes en segundo plano?
En el mundo de la computación en la nube, y en particular con AWS, la capacidad de procesar imágenes automáticamente detrás de escena representa una herramienta poderosa para muchas aplicaciones. Este proceso puede implicar cambiar el tamaño, aplicar filtros, o transformar imágenes de diversas formas. En esta clase, exploramos cómo configurar un procesador de imágenes en segundo plano que responde a eventos de creación de imágenes en un bucket S3, usando la combinación de AWS Lambda y la biblioteca Sharp.
¿Cómo implementar la generación de imágenes en diferentes tamaños?
La clave para generar automáticamente imágenes de múltiples tamaños al cargarlas en S3 es usar AWS Lambda junto con la biblioteca Sharp, que facilita el redimensionado de imágenes. A continuación, te muestro cómo estructurar el código esencial para lograr esto utilizando JavaScript:
const AWS = require('aws-sdk');
const Sharp = require('sharp');
const S3 = new AWS.S3();
exports.thumbnailGenerator = async (event, context) => {
const sourceBucket = event.Records[0].s3.bucket.name;
const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const imageObject = await S3.getObject({ Bucket: sourceBucket, Key: key }).promise();
const imageBody = imageObject.Body;
await resizeImage(imageBody, 50, 50);
await resizeImage(imageBody, 100, 100);
await resizeImage(imageBody, 200, 200);
};
const resizeImage = async (imageBody, width, height) => {
const buffer = await Sharp(imageBody)
.resize(width, height)
.toBuffer();
await S3.putObject({
Bucket: 'processed-images-bucket',
Key: `resized-${width}x${height}-${Date.now()}.jpg`,
Body: buffer
}).promise();
};
Este script manipula imágenes creadas en un bucket S3 y las redimensiona usando Sharp, subiéndolas nuevamente al bucket especificado.
¿Cómo configurar eventos de S3 para disparar una Lambda?
AWS permite que ciertas acciones en un bucket S3 disparen funciones Lambda. Para configurar esto, nuestro serverless.yml debe incluir los detalles sobre qué carpetas y tipos de eventos activarían las Lambdas.
functions:
thumbnailGenerator:
handler: handler.thumbnailGenerator
events:
- s3:
bucket: my-image-bucket
event: s3:ObjectCreated:*
rules:
- prefix: uploads/
existing: true
Este archivo indica que cada vez que se cree un objeto en el bucket my-image-bucket
dentro de la carpeta uploads/
, la función thumbnailGenerator
se ejecutará.
¿Qué son las Lambda Layers y cómo pueden optimizar tu proyecto?
Finalmente, integrar dependencias como Sharp en tu proyecto puede aumentar significativamente el tamaño de las Lambdas, lo que complica su despliegue. Aquí entran en juego las Lambda Layers. Al crear un layer, puedes incluir en él tus dependencias para no tener que empaquetarlas cada vez con tu código. Esto optimiza tanto el proceso de despliegue como la gestión de actualizaciones futuras.
AWS ofrece tutoriales detallados sobre cómo utilizar sus capas Lambda, lo que permite mantener tus Lamba Functions ligeras y versátiles.
Con esto, puedes gestionar eficientemente tus aplicaciones, asegurando un rendimiento óptimo para el redimensionamiento automático de imágenes y otras acciones necesarias. ¡La nube espera por ti para que explotes todo su potencial!