¿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.
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í:
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:
Esto permitirá que el método
test()
se use en la función lambda sin ningún problema.