S3 Object Lambda (S3OL) es un servicio de AWS que nos permite transformar objetos al vuelo, generando la ilusión de que tenemos almacenadas distintas versiones de un mismo objeto. En comparación con Lambda, nos ofrece un tamaño de respuesta ilimitado, respuestas en streaming y simplicidad en el lanzamiento de funciones para el procesamiento de los datos.
Transformando objetos con S3 Object Lambda
La modificación de objetos guardados en sistemas de almacenamiento de objetos como S3 es un patrón de uso muy habitual en la nube. Hasta el momento de la introducción de S3 Object Lambda (S3OL), la principal opción para la transformación de objetos almacenados en S3 eran las funciones Lambda. Para ello el usuario debía lanzar una función manualmente, normalmente en respuesta a algún tipo de evento, y modificar y retornar el objeto modificado. Las funciones Lambda tienen un tamaño máximo de respuesta y no permiten retornar las respuestas por partes o en streaming.
Con S3OL el proceso de transformación de objetos se simplifica. Este servicio introduce un nuevo componente denominado punto de acceso de S3OL. Para lanzar una función lambda que transforme el objeto ahora basta con realizar una petición de get object, list object o head object de S3 contra este nuevo punto de acceso, como si de un bucket de S3 se tratara, con la diferencia de que este punto de acceso lanzará una función que transformará el objeto. Este servicio genera la ilusión de que estamos trabajando directamente con un bucket de S3, pero en realidad se produce una transformación en Lambda antes de retornarlo. Esto es útil cuando queremos proporcionar distintas vistas de un mismo objeto sin necesidad de almacenarlas todas (anonimizar objetos según el usuario que los accede, proporcionar distintos tamaños de una misma imagen, etc.). A diferencia de las funciones Lambda, limitadas a respuestas de 6 MiB, S3 Object Lambda no tiene límite (más allá de un tiempo de ejecución máximo de 60 segundos), y permite retornar la respuesta en streaming.

A pesar de las ventajas de este servicio encontramos dos principales inconvenientes a tener en cuenta. En primer lugar, S3OL introduce una cierta latencia extra respecto a transformar el objeto en una Lambda lanzada por nosotros mismos. En este artículo de 2023 se muestra como para descargar un objeto de 1 MiB desde S3 a Lambda y retornar una respuesta vacía se aplica una cierta penalización. Esto se debe a que la petición debe pasar por el punto de acceso de S3OL dos veces: primero para invocar la Lambda y de nuevo al finalizar, para retornar la respuesta (aunque sea una respuesta vacía). Esta penalización se ve enmascarada cuando se trabaja con objetos de mayor tamaño, ya que Lambda no permite retornar respuestas más grandes de 6 MiB y debe pasar por otro servicio como S3 para retornar la respuesta, lo que aumenta su latencia significativamente, haciendo de S3OL una opción más atractiva.

Por otro lado, S3OL también recibe una penalización en términos de coste. Si modificamos el objeto utilizando una Lambda clásica se nos facturará por el almacenamiento utilizado en S3, por el tiempo de ejecución y la cantidad de memoria de nuestra Lambda y por la cantidad de datos que salgan de AWS. Por otro lado, S3OL tendrá los mismos costes de base, a los que se le añade un sobrecoste por el tamaño de los datos que pasen por el punto de acceso de S3OL de retorno. Teniendo en cuenta esta limitación debemos seleccionar los casos de uso cuidadosamente, siendo los más beneficiosos aquellos que reducen el tamaño del objeto original tras el procesamiento (por ejemplo la compresión de objetos, reducción de imágenes, etc.). Seleccionando el caso de uso adecuado y trabajando con un volumen de datos adecuados podemos conseguir mejores costes y tiempos de ejecución con S3OL respecto a Lambda y S3 por separado.

A día de hoy empiezan a existir otros servicios que proporcionan funcionalidades similares. AWS introdujo el primero, S3 Object Lambda, en 2021. En 2023 MinIO, un sistema de almacenamiento de objetos compatible con S3, anunció su propia implementación, MinIO Object Lambda. Otros proveedores en la nube disponen de servicios similares, pero en la actualidad no se encuentran disponibles para el público general y son utilizados con propósitos de investigación.
Más allá de la transformación de objetos en batch
AWS introdujo S3OL para la transformación de objetos completos provenientes de S3. Esta característica, ya útil de por sí, eclipsa otras posibilidades que este servicio ofrece. Como se ha mencionado anteriormente, S3OL no solo puede transformar objetos de S3 en batch, es decir, leyéndolos enteros y procesándolos posteriormente, sino que puede hacerlo en streaming, leyendo pequeños fragmentos y retornándolos por partes. Esto es especialmente útil para casos de uso que requieren de una baja latencia, como puede ser el procesamiento de vídeo directamente almacenado en S3, el procesamiento de datos en streaming para la generación de resultados parciales con baja latencia, etc.. A día de hoy AWS Lambda también admite respuestas en streaming sin S3OL, pero el tamaño máximo de los datos que pueden retornar sigue limitado, como también lo está su ancho de banda de transferencia de la respuesta. Por otro lado, las lambdas lanzadas por S3OL permiten no solamente leer de S3, sino de cualquier servicio, lo que nos permite utilizar S3OL con servicios con mayor afinidad con el procesamiento en streaming, como Kafka o Kinesis.
Conclusión
AWS ofrece S3 Object Lambda, un servicio para la modificación de objetos almacenados en S3 mediante funciones Lambda que son invocadas de manera transparente. Este servicio nos permite interactuar directamente con nuestros objetos en S3 y modificarlos al vuelo utilizando funciones Lambda sin tener que gestionar su lanzamiento manualmente.
Pese a los puntos fuertes de S3OL encontramos dos desventajas: una mayor latencia y un sobrecoste al retornar datos. Aunque son dos imitaciones importantes, escoger el caso de uso correctamente nos permite obtener mejores tiempos de ejecución y costes con S3OL respecto a Lambda y S3 por separado.
S3OL va más allá del procesamiento de datos en batch y abre la puerta al procesamiento de datos en streaming y a la interconexión con otros servicios de almacenamiento a parte de S3.
Leave a Reply