{"id":1380,"date":"2025-07-28T10:19:31","date_gmt":"2025-07-28T10:19:31","guid":{"rendered":"https:\/\/cloudlab.urv.cat\/catedracloud\/?p=1380"},"modified":"2025-07-28T10:19:38","modified_gmt":"2025-07-28T10:19:38","slug":"s3-object-lambda-transformando-objetos-al-vuelo","status":"publish","type":"post","link":"https:\/\/cloudlab.urv.cat\/catedracloud\/2025\/07\/28\/s3-object-lambda-transformando-objetos-al-vuelo\/","title":{"rendered":"S3 Object Lambda &#8211; Transformando objetos al vuelo"},"content":{"rendered":"\n<figure class=\"wp-block-pullquote\"><blockquote><p>S3 Object Lambda (S3OL) es un servicio de AWS que nos permite transformar objetos al vuelo, generando la ilusi\u00f3n de que tenemos almacenadas distintas versiones de un mismo objeto. En comparaci\u00f3n con Lambda, nos ofrece un tama\u00f1o de respuesta ilimitado, respuestas en <em>streaming<\/em> y simplicidad en el lanzamiento de funciones para el procesamiento de los datos.<\/p><\/blockquote><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Transformando objetos con S3 Object Lambda<\/h2>\n\n\n\n<p>La modificaci\u00f3n de objetos guardados en sistemas de almacenamiento de objetos como S3 es un patr\u00f3n de uso muy habitual en la nube. Hasta el momento de la introducci\u00f3n de S3 Object Lambda (S3OL), la principal opci\u00f3n para la transformaci\u00f3n de objetos almacenados en S3 eran las funciones Lambda. Para ello el usuario deb\u00eda lanzar una funci\u00f3n manualmente, normalmente en respuesta a alg\u00fan tipo de evento, y modificar y retornar el objeto modificado. Las funciones Lambda tienen un tama\u00f1o m\u00e1ximo de respuesta y no permiten retornar las respuestas por partes o en <em>streaming.<\/em><\/p>\n\n\n\n<p>Con S3OL el proceso de transformaci\u00f3n de objetos se simplifica. Este servicio introduce un nuevo componente denominado <strong>punto de acceso de S3OL<\/strong>. Para lanzar una funci\u00f3n lambda que transforme el objeto ahora basta con realizar una petici\u00f3n 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\u00e1 una funci\u00f3n que transformar\u00e1 el objeto. Este servicio genera la ilusi\u00f3n de que estamos trabajando directamente con un bucket de S3, pero en realidad se produce una transformaci\u00f3n en Lambda antes de retornarlo. Esto es \u00fatil cuando queremos <strong>proporcionar distintas vistas de un mismo objeto<\/strong> <strong>sin necesidad de almacenarlas todas<\/strong> (anonimizar objetos seg\u00fan el usuario que los accede, proporcionar distintos tama\u00f1os de una misma imagen, etc.). A diferencia de las funciones Lambda, <a href=\"https:\/\/docs.aws.amazon.com\/lambda\/latest\/dg\/gettingstarted-limits.html\">limitadas a respuestas de 6 MiB<\/a>, S3 Object Lambda no tiene l\u00edmite (m\u00e1s all\u00e1 de un tiempo de ejecuci\u00f3n m\u00e1ximo de 60 segundos), y permite retornar la respuesta en <em>streaming<\/em>. <\/p>\n\n\n\n<div class=\"wp-block-uagb-image uagb-block-c863d593 wp-block-uagb-image--layout-default wp-block-uagb-image--effect-static wp-block-uagb-image--align-none\"><figure class=\"wp-block-uagb-image__figure\"><img decoding=\"async\" src=\"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/07\/image-3.png\" alt=\"\" width=\"1024\" height=\"520\" title=\"\" loading=\"lazy\" role=\"img\" \/><figcaption class=\"uagb-image-caption\">Acceso a un objeto en S3 directamente y a trav\u00e9s de S3 Object Lambda. <a href=\"https:\/\/aws.amazon.com\/es\/blogs\/aws\/introducing-amazon-s3-object-lambda-use-your-code-to-process-data-as-it-is-being-retrieved-from-s3\/\">Fuente<\/a>.<\/figcaption><\/figure><\/div>\n\n\n\n<p>A pesar de las ventajas de este servicio encontramos<strong> dos principales inconvenientes<\/strong> a tener en cuenta. En primer lugar, S3OL introduce <strong>una cierta latencia extra<\/strong> respecto a transformar el objeto en una Lambda lanzada por nosotros mismos. En <a href=\"https:\/\/ieeexplore.ieee.org\/abstract\/document\/10228890\">este art\u00edculo de 2023<\/a> se muestra como para descargar un objeto de 1 MiB desde S3 a Lambda y retornar una respuesta vac\u00eda <strong>se aplica una cierta penalizaci\u00f3n<\/strong>. Esto se debe a que la petici\u00f3n 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\u00eda). Esta penalizaci\u00f3n se ve enmascarada <strong>cuando se trabaja con objetos de mayor tama\u00f1o<\/strong>, ya que Lambda no permite retornar respuestas <strong>m\u00e1s grandes de 6 MiB<\/strong> y debe pasar por otro servicio como S3 para retornar la respuesta, lo que aumenta su latencia significativamente, haciendo de S3OL una opci\u00f3n m\u00e1s atractiva. <\/p>\n\n\n\n<div class=\"wp-block-uagb-image uagb-block-c9b711cc wp-block-uagb-image--layout-default wp-block-uagb-image--effect-static wp-block-uagb-image--align-none\"><figure class=\"wp-block-uagb-image__figure\"><img decoding=\"async\" src=\"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/07\/Captura-de-pantalla-2025-07-28-a-las-10.19.09-1024x514.png\" alt=\"\" class=\"uag-image-1385\" width=\"1024\" height=\"514\" title=\"Captura de pantalla 2025-07-28 a las 10.19.09\" loading=\"lazy\" role=\"img\" \/><figcaption class=\"uagb-image-caption\">Desglose de la latencia de extremo a extremo de una funci\u00f3n que descarga un objeto de 1 MiB y retorna una respuesta vac\u00eda.<em> <a href=\"https:\/\/ieeexplore.ieee.org\/abstract\/document\/10228890\">Fuente<\/a><\/em>.<\/figcaption><\/figure><\/div>\n\n\n\n<p>Por otro lado, S3OL tambi\u00e9n recibe <strong>una penalizaci\u00f3n en t\u00e9rminos de coste<\/strong>. Si modificamos el objeto utilizando una Lambda cl\u00e1sica se nos facturar\u00e1 por el almacenamiento utilizado en S3, por el tiempo de ejecuci\u00f3n y la cantidad de memoria de nuestra Lambda y por la cantidad de datos que salgan de AWS. Por otro lado, S3OL tendr\u00e1 los mismos costes de base, a los que se le a\u00f1ade un sobrecoste por el tama\u00f1o de los datos que pasen <strong>por el punto de acceso de S3OL de retorno<\/strong>. Teniendo en cuenta esta limitaci\u00f3n debemos seleccionar los casos de uso cuidadosamente, siendo los m\u00e1s beneficiosos aquellos que reducen el tama\u00f1o del objeto original tras el procesamiento (por ejemplo la compresi\u00f3n de objetos, reducci\u00f3n de im\u00e1genes, etc.). Seleccionando el caso de uso adecuado y trabajando con un volumen de datos adecuados podemos <a href=\"https:\/\/ieeexplore.ieee.org\/abstract\/document\/10228890\">conseguir mejores costes y tiempos de ejecuci\u00f3n con S3OL respecto a Lambda y S3 por separado.<\/a><\/p>\n\n\n\n<div class=\"wp-block-uagb-image uagb-block-d3c33986 wp-block-uagb-image--layout-default wp-block-uagb-image--effect-static wp-block-uagb-image--align-none\"><figure class=\"wp-block-uagb-image__figure\"><img decoding=\"async\" src=\"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/07\/image-4-1024x379.png\" alt=\"\" width=\"1024\" height=\"379\" title=\"\" loading=\"lazy\" role=\"img\" \/><figcaption class=\"uagb-image-caption\">Tiempo de ejecuci\u00f3n (izquierda) y coste (derecha) de Lambda y S3OL con una funci\u00f3n que selecciona l\u00edneas de un objeto con texto de tama\u00f1o variable. <\/figcaption><\/figure><\/div>\n\n\n\n<p>A d\u00eda de hoy empiezan a existir otros servicios que proporcionan funcionalidades similares. AWS <a href=\"https:\/\/aws.amazon.com\/es\/blogs\/aws\/introducing-amazon-s3-object-lambda-use-your-code-to-process-data-as-it-is-being-retrieved-from-s3\/\">introdujo el primero, S3 Object Lambda, en 2021<\/a>. En 2023 MinIO, un sistema de almacenamiento de objetos compatible con S3, anunci\u00f3 su propia implementaci\u00f3n, <a href=\"https:\/\/blog.min.io\/minio-object-lambda\/\">MinIO Object Lambda<\/a>. Otros proveedores en la nube disponen de servicios similares, pero en la actualidad no se encuentran disponibles para el p\u00fablico general y son utilizados con prop\u00f3sitos de investigaci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">M\u00e1s all\u00e1 de la transformaci\u00f3n de objetos en <em>batch<\/em><\/h2>\n\n\n\n<p>AWS introdujo S3OL para la transformaci\u00f3n de objetos completos provenientes de S3. Esta caracter\u00edstica, ya \u00fatil de por s\u00ed, eclipsa otras posibilidades que este servicio ofrece. Como se ha mencionado anteriormente, S3OL no solo puede transformar objetos de S3 en <em>batch<\/em>, es decir, ley\u00e9ndolos enteros y proces\u00e1ndolos posteriormente, sino que puede <strong>hacerlo en <em>streaming<\/em><\/strong>, leyendo peque\u00f1os fragmentos y retorn\u00e1ndolos por partes. Esto es especialmente \u00fatil para casos de uso que requieren de una baja latencia, como puede ser el procesamiento de v\u00eddeo directamente almacenado en S3, el procesamiento de datos en <em>streaming <\/em>para la generaci\u00f3n de resultados parciales con baja latencia, etc.. A d\u00eda de hoy AWS Lambda <a href=\"https:\/\/docs.aws.amazon.com\/lambda\/latest\/dg\/configuration-response-streaming.html\">tambi\u00e9n admite respuestas en <em>streaming<\/em><\/a> sin S3OL, pero el <strong>tama\u00f1o m\u00e1ximo de los datos<\/strong> que pueden retornar sigue <strong>limitado<\/strong>, como tambi\u00e9n lo est\u00e1 su <strong>ancho de banda de transferencia de la respuesta<\/strong>. Por otro lado,  las lambdas lanzadas por S3OL permiten <strong>no solamente leer de S3, sino de cualquier servicio<\/strong>, lo que nos permite utilizar S3OL con servicios con <strong>mayor afinidad con el procesamiento en <em>streaming<\/em><\/strong>, como <strong>Kafka<\/strong> o <strong>Kinesis<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusi\u00f3n<\/h2>\n\n\n\n<p>AWS ofrece S3 Object Lambda,  un servicio para la modificaci\u00f3n 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.<\/p>\n\n\n\n<p>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\u00f3n y costes con S3OL respecto a Lambda y S3 por separado.<\/p>\n\n\n\n<p>S3OL va m\u00e1s all\u00e1 del procesamiento de datos en <em>batch <\/em>y abre la puerta al procesamiento de datos en <em>streaming<\/em> y a la interconexi\u00f3n con otros servicios de almacenamiento a parte de S3.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>S3 Object Lambda (S3OL) es un servicio de AWS que nos permite transformar objetos al vuelo, generando la ilusi\u00f3n de que tenemos almacenadas distintas versiones de un mismo objeto. En comparaci\u00f3n con Lambda, nos ofrece un tama\u00f1o de respuesta ilimitado, respuestas en streaming y simplicidad en el lanzamiento de funciones para el procesamiento de los [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":1392,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","_swt_meta_header_display":false,"_swt_meta_footer_display":false,"_swt_meta_site_title_display":false,"_swt_meta_sticky_header":false,"_swt_meta_transparent_header":false,"footnotes":""},"categories":[34,37,113,32,31],"tags":[],"class_list":["post-1380","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-almacenamiento","category-aws","category-cloud-computing","category-streaming","category-tecnologias"],"jetpack_featured_media_url":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/07\/b3a7a4c3-8b79-4188-92a6-966950c57a04.png","uagb_featured_image_src":{"full":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/07\/b3a7a4c3-8b79-4188-92a6-966950c57a04.png",1536,1024,false],"thumbnail":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/07\/b3a7a4c3-8b79-4188-92a6-966950c57a04-150x150.png",150,150,true],"medium":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/07\/b3a7a4c3-8b79-4188-92a6-966950c57a04-300x200.png",300,200,true],"medium_large":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/07\/b3a7a4c3-8b79-4188-92a6-966950c57a04-768x512.png",768,512,true],"large":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/07\/b3a7a4c3-8b79-4188-92a6-966950c57a04-1024x683.png",1024,683,true],"1536x1536":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/07\/b3a7a4c3-8b79-4188-92a6-966950c57a04.png",1536,1024,false],"2048x2048":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/07\/b3a7a4c3-8b79-4188-92a6-966950c57a04.png",1536,1024,false]},"uagb_author_info":{"display_name":"Pablo Gimeno Sarroca","author_link":"https:\/\/cloudlab.urv.cat\/catedracloud\/author\/pgimeno\/"},"uagb_comment_info":3,"uagb_excerpt":"S3 Object Lambda (S3OL) es un servicio de AWS que nos permite transformar objetos al vuelo, generando la ilusi\u00f3n de que tenemos almacenadas distintas versiones de un mismo objeto. En comparaci\u00f3n con Lambda, nos ofrece un tama\u00f1o de respuesta ilimitado, respuestas en streaming y simplicidad en el lanzamiento de funciones para el procesamiento de los&hellip;","_links":{"self":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/1380","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/comments?post=1380"}],"version-history":[{"count":5,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/1380\/revisions"}],"predecessor-version":[{"id":1400,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/1380\/revisions\/1400"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/media\/1392"}],"wp:attachment":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/media?parent=1380"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/categories?post=1380"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/tags?post=1380"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}