es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué obtengo “unable to import module” al crear una capa personalizada de AWS Lambda para Python?

Tengo un módulo llamado custom_module.py que tiene funciones y métodos que me gustaría usar en varios Lambdas diferentes. El código se ve así:


def test():
return 'Módulo personalizado'

Intenté convertir esto en una capa de Lambda comprimiendo este archivo y usando el formulario para crear una capa. Todo parecía funcionar bien, e importé el módulo en mi Lambda para usarlo de la siguiente manera:


import json
from custom_module import test

print('Cargando función')

def lambda_handler(event, context):
return test()

Desafortunadamente, al ejecutar esto obtengo un error "No se puede importar el módulo 'lambda_function': No se encontró el módulo 'custom_module'". ¿Qué estoy haciendo mal aquí? También tengo especificados los runtimes y la arquitectura correctos.

  • Editar –

Siguiendo el comentario, intenté esta estructura de archivos:


capa
|
+--- python
|
+--- custom_module
|
+--- init.py (contiene el método test())

Comprimí la carpeta capa como capa.zip y lo subí. Desafortunadamente, sigo teniendo el mismo problema.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en la forma en que se estructura la capa. Al crear una capa lambda, el módulo debe colocarse en una carpeta llamada python. Dentro de esta carpeta, el módulo debe colocarse en una carpeta con el nombre del módulo, y el archivo que contiene el código del módulo debe llamarse __init__.py.

    En este caso, la estructura de carpetas debería lucir así:

    layer
    |
    +--- python
         |
         +--- custom_module
              |
              +--- __init__.py (contiene el método test())
    

    Una vez creada la capa con esta estructura, se puede cargar en AWS Lambda y usar en el código de la función con la siguiente declaración de importación:

    from custom_module import test
    

    Esto permitirá que el método test() se use en la función lambda sin ningún problema.

Comments are closed.