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 361128 1. {main}() /volume1/web/WebTomoNota/index.php:0 0.0001 361440 2. require('/volume1/web/WebTomoNota/wp-blog-header.php') /volume1/web/WebTomoNota/index.php:17 0.4910 14462616 3. require_once('/volume1/web/WebTomoNota/wp-includes/template-loader.php') /volume1/web/WebTomoNota/wp-blog-header.php:19 0.4976 14631008 4. include('/volume1/web/WebTomoNota/wp-content/themes/yuki/index.php') /volume1/web/WebTomoNota/wp-includes/template-loader.php:106 2.6758 19008912 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.6758 19008912 6. get_template_part($slug = 'template-parts/special', $name = 'single', $args = ???) /volume1/web/WebTomoNota/wp-content/themes/yuki/inc/helpers.php:34 2.6758 19009488 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.6758 19009600 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.6761 19015712 9. require('/volume1/web/WebTomoNota/wp-content/themes/yuki/template-parts/special-single.php') /volume1/web/WebTomoNota/wp-includes/template.php:812 2.7190 19064912 10. do_action($hook_name = 'yuki_action_after_single_post') /volume1/web/WebTomoNota/wp-content/themes/yuki/template-parts/special-single.php:58 2.7190 19065288 11. WP_Hook->do_action($args = [0 => '']) /volume1/web/WebTomoNota/wp-includes/plugin.php:517 2.7190 19065288 12. WP_Hook->apply_filters($value = '', $args = [0 => '']) /volume1/web/WebTomoNota/wp-includes/class-wp-hook.php:348 2.8172 19166744 13. yuki_show_post_comments('') /volume1/web/WebTomoNota/wp-includes/class-wp-hook.php:324 2.8174 19166744 14. comments_template($file = ???, $separate_comments = ???) /volume1/web/WebTomoNota/wp-content/themes/yuki/inc/template-functions.php:354 2.8216 19188328 15. require('/volume1/web/WebTomoNota/wp-content/themes/yuki/comments.php') /volume1/web/WebTomoNota/wp-includes/comment-template.php:1631 2.8228 19189504 16. comment_form($args = ['class_form' => 'comment-form yuki-form form-default'], $post = ???) /volume1/web/WebTomoNota/wp-content/themes/yuki/comments.php:66 2.8250 19201224 17. do_action($hook_name = 'comment_form', ...$arg = variadic(1337)) /volume1/web/WebTomoNota/wp-includes/comment-template.php:2896 2.8250 19201600 18. WP_Hook->do_action($args = [0 => 1337]) /volume1/web/WebTomoNota/wp-includes/plugin.php:517 2.8250 19201600 19. WP_Hook->apply_filters($value = '', $args = [0 => 1337]) /volume1/web/WebTomoNota/wp-includes/class-wp-hook.php:348 2.8252 19202352 20. ReCAPTCHAPlugin->show_recaptcha_in_comments(1337) /volume1/web/WebTomoNota/wp-includes/class-wp-hook.php:324