Hola a tod@s

En este post veremos cómo añadir librerías extra a nuestras funciones lambda python.

¿Por qué necesitamos añadir librerías extra a las funciones Lambda?
AWS Lambda proporciona un entorno de ejecución para nuestras aplicaciones, pero a veces las librerías por defecto que vienen con este entorno no cubren todas nuestras necesidades. Aquí es donde la adición de librerías extra se vuelve esencial.

El método que mejor me ha funcionado a mí a la hora de hacer esta tarea es usar una EC2 con el sistema operativo Linux2 de AWS, que es el mismo sistema operativo que usan las lambda facilitando la descarga de librerías. Entiendo que también se podrá con una máquina virtual. Otra opción a la hora de descargar las librerías se puede hacer desde un entorno virtual VENV.

  • Versión python:
    Una vez dentro de nuestro EC2 (o máquina virtual o vuestro mejor recurso) comprobamos la versión python ya que después a la hora de ejecutarlo desde las lambda se recomienda usar las mismas versiones (o bien un por arriba).
    Se pueden
  • Descargando librería:
    Con el comando: (ejemplo descarga librería requests)
pip3 install requests -t /home/ec2-user/carpetaEjemplo1/carpetaEjemplo2

Esto nos dejará toda la librería dentro de la carpeta:

  • Cargar contenido a la lambda:
    Para la carga de las carpetas de las librerías en la lambda se debe de comprimir todo en un zip.

En la imagen vemos el ejemplo, en este caso he descargado requests y a parte tengo dos carpetas más, imagenes y utils que son de la misma lambda. El archivo que lanza la lambda es lambda_function.py.
Todo esto lo seleccionamos y lo comprimirmos en un zip.

  • Cargar en lambda el zip:
    Desde dentro de la lambda, en el botón «Cargar desde» seleccionamos el archivo zip:

Esto subirá todos los archivos a la lambda.

  • Ejecución lambda:
    Recordar que para poder ejecutar la lambda con un archivo .py diferente hay que configurar cual es el archivo que arranca la lambda y comprobar la versión.

Desde esta parte de configuración se le puede inicar el controlador que será el archivo .py que se ejecutará al iniciar la lambda.

Posibles Errores:
Si existe algún error al ejecutar la lambda debido a las librerías, es posible que tengamos que descargar alguna librería extra porque es complementaria a la necesaria o bien modificar alguna de las carpetas descargadas por la nueva descargada y además comprobar la versión de python.

Por ejemplo, en la librería requests me dió un problema de ssl y tuve que descargar la librería de urllib3<2.0 para poder ejecutar el script sin problemas. Se descargaron las carpetas urllib3 y otra urllib3xxx.
¿Y como se hace? Al descargar las carpetas, copiar y sobreescribir en caso de ser necesario. Crear zip y subirlo a la lambda.

Espero que este post os ayude.

Salu2!

Un comentario

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Warning: Undefined array key "rerror" in /volume1/web/WebTomoNota/wp-content/plugins/wp-recaptcha-bp/recaptcha.php on line 300 Call Stack: 0.0001 361048 1. {main}() /volume1/web/WebTomoNota/index.php:0 0.0002 361360 2. require('/volume1/web/WebTomoNota/wp-blog-header.php') /volume1/web/WebTomoNota/index.php:17 0.5029 14462536 3. require_once('/volume1/web/WebTomoNota/wp-includes/template-loader.php') /volume1/web/WebTomoNota/wp-blog-header.php:19 0.5090 14630928 4. include('/volume1/web/WebTomoNota/wp-content/themes/yuki/index.php') /volume1/web/WebTomoNota/wp-includes/template-loader.php:106 2.6741 19008832 5. yuki_do_elementor_location($elementor_location = 'single', $template_part = 'template-parts/special', $name = 'single') /volume1/web/WebTomoNota/wp-content/themes/yuki/index.php:20 2.6741 19008832 6. get_template_part($slug = 'template-parts/special', $name = 'single', $args = ???) /volume1/web/WebTomoNota/wp-content/themes/yuki/inc/helpers.php:34 2.6741 19009408 7. locate_template($template_names = [0 => 'template-parts/special-single.php', 1 => 'template-parts/special.php'], $load = TRUE, $load_once = FALSE, $args = []) /volume1/web/WebTomoNota/wp-includes/general-template.php:206 2.6742 19009520 8. load_template($_template_file = '/volume1/web/WebTomoNota/wp-content/themes/yuki/template-parts/special-single.php', $load_once = FALSE, $args = []) /volume1/web/WebTomoNota/wp-includes/template.php:745 2.6744 19015632 9. require('/volume1/web/WebTomoNota/wp-content/themes/yuki/template-parts/special-single.php') /volume1/web/WebTomoNota/wp-includes/template.php:812 2.7195 19064832 10. do_action($hook_name = 'yuki_action_after_single_post') /volume1/web/WebTomoNota/wp-content/themes/yuki/template-parts/special-single.php:58 2.7195 19065208 11. WP_Hook->do_action($args = [0 => '']) /volume1/web/WebTomoNota/wp-includes/plugin.php:517 2.7195 19065208 12. WP_Hook->apply_filters($value = '', $args = [0 => '']) /volume1/web/WebTomoNota/wp-includes/class-wp-hook.php:348 2.8051 19166664 13. yuki_show_post_comments('') /volume1/web/WebTomoNota/wp-includes/class-wp-hook.php:324 2.8053 19166664 14. comments_template($file = ???, $separate_comments = ???) /volume1/web/WebTomoNota/wp-content/themes/yuki/inc/template-functions.php:354 2.8089 19188248 15. require('/volume1/web/WebTomoNota/wp-content/themes/yuki/comments.php') /volume1/web/WebTomoNota/wp-includes/comment-template.php:1631 2.8100 19189424 16. comment_form($args = ['class_form' => 'comment-form yuki-form form-default'], $post = ???) /volume1/web/WebTomoNota/wp-content/themes/yuki/comments.php:66 2.8122 19201144 17. do_action($hook_name = 'comment_form', ...$arg = variadic(1337)) /volume1/web/WebTomoNota/wp-includes/comment-template.php:2896 2.8122 19201520 18. WP_Hook->do_action($args = [0 => 1337]) /volume1/web/WebTomoNota/wp-includes/plugin.php:517 2.8122 19201520 19. WP_Hook->apply_filters($value = '', $args = [0 => 1337]) /volume1/web/WebTomoNota/wp-includes/class-wp-hook.php:348 2.8124 19202272 20. ReCAPTCHAPlugin->show_recaptcha_in_comments(1337) /volume1/web/WebTomoNota/wp-includes/class-wp-hook.php:324