¿Cómo soluciono los errores «permiso denegado» o «no se puede importar el módulo» al cargar un paquete de despliegue de Lambda?
Cuando cargo mi paquete de despliegue de AWS Lambda, aparece el error «permiso denegado» o «no se puede importar el módulo».
Breve descripción
Lambda requiere permisos de lectura globales en los archivos de código y en cualquier biblioteca dependiente de su paquete de despliegue. Si no configura el paquete de despliegue de Lambda con los permisos de seguridad correctos, Lambda devolverá un error al intentar cargar el archivo. Los errores permiso denegado y no se puede importar el módulo suelen producirse cuando las aplicaciones de integración continua crean paquetes de despliegue.
En las versiones ejecutables interpretadas, como Python, el permiso correcto para los archivos del paquete de despliegue es 644. En las carpetas del paquete de despliegue, el permiso correcto es 755.
En las versiones ejecutables compiladas, como Go, el permiso correcto para los archivos y directorios ejecutables en un paquete de despliegue es 755 en notación numérica de permisos de Unix.
Nota: Dado que Lambda usa permisos POSIX, se recomienda usar un sistema operativo (SO) compatible con POSIX al compilar paquetes de despliegue de Lambda. Los sistemas operativos compatibles incluyen Linux, Unix o macOS. La igualdad entre el modelo de permisos de su entorno de compilación y el entorno de versión ejecutable de Lambda reduce la posibilidad de que se produzcan problemas de permisos.
Para solucionar un problema de permisos como usuario de Windows, realice una de las siguientes tareas para configurar un entorno Linux:
- Instalar una distribución de Linux en su PC. Para obtener más información, consulte How to install Linux on Windows with WSL en el sitio web de Microsoft.
- Usar una imagen de máquina de Amazon (AMI) para lanzar una instancia de Amazon Elastic Compute Cloud (Amazon EC2).
Solución
Cómo buscar el archivo o la carpeta que está causando el error
Según el lenguaje de programación que haya utilizado para escribir el código de la función de Lambda, es posible que la causa del error no esté clara en el mensaje de error.
Por ejemplo, un mensaje de error de la función de Node.js muestra el nombre del archivo o la carpeta que es el origen del error. Sin embargo, un mensaje de error de una función de Python no muestra el nombre del archivo o la carpeta que es el origen del error.
Ejemplo de error de denegación de permiso de una función de Lambda de Node.js
{ "errorMessage": "EACCES: permission denied, open '/var/task/index.js'", "errorType": "Error", "stackTrace": [ "Object.fs.openSync (fs.js:641:18)", "Object.fs.readFileSync (fs.js:509:33)", "Object.Module._extensions..js (module.js:578:20)", "Module.load (module.js:487:32)", "tryModuleLoad (module.js:446:12)", "Function.Module._load (module.js:438:3)", "Module.require (module.js:497:17)", "require (internal/module.js:20:19)" ] }
Ejemplo de error de una función de Lambda de Python que no puede importar el módulo
«Unable to import module 'index': No module named index»
Para solucionar este error, consulte ¿Cómo puedo solucionar el error «Unable to import module» que se muestra cuando ejecuto código Lambda en Python?
Si su paquete de despliegue de Lambda no es Amazon Linux 2 o Amazon Linux 2023, debe hacer coincidir la compatibilidad con las versiones de Amazon Linux. Para ello, utilice los siguientes parámetros al instalar el paquete. El siguiente ejemplo usa un sistema operativo Python 3.12 y bibliotecas NumPy en la misma carpeta donde está la función de Lambda:
pip3 install --platform manylinux2014_x86_64 --target . --python-version 3.12 --only-binary=:all: numpy
Según su caso de uso, ajuste los siguientes valores:
- El valor platform manylinux2014_x86_64 especifica la plataforma del paquete.
- El valor python-version 3.12 indica que el paquete es compatible con la versión de Python especificada. Ajuste este valor de acuerdo con la versión ejecutable de Python a la que se dirige en Lambda.
- El parámetro only-binary=:all indica a pip que descargue solo archivos binarios. Esto garantiza que el paquete sea compatible con el entorno de versión ejecutable de Lambda.
Ejemplo de un error de la función de Lambda de Python para bibliotecas externas a las que les faltan los permisos necesarios
«Unable to import module 'index': No module named requests»
Para comprobar los permisos de todos los archivos y carpetas del archivo.zip del paquete de despliegue, ejecute el comando zipinfo en la interfaz de la línea de comandos (CLI):
zipinfo lambda-package.zip
Nota: Sustituya lambda-package.zip por el nombre del archivo.zip del paquete de despliegue.
Ejemplo de respuesta del comando zipinfo
Archive: lambda-package.zipZip file size: 305 bytes, number of entries: 1-r-------- 3.0 unx 188 tx defN 21-Feb-13 20:48 example.py 1 file, 188 bytes uncompressed, 135 bytes compressed: 28.2%
Nota: En el ejemplo anterior, el permiso para example.py es -r-------- o 400 en notación numérica de permisos de Unix. Actualice el permiso del archivo a 644. Para obtener más información, consulte Notation of traditional Unix permissions en el sitio web de Wikipedia.
Actualización de los permisos de su paquete de despliegue
Nota: Los siguientes comandos solo funcionan con Linux, Unix y macOS.
-
Para desempaquetar los archivos y carpetas del paquete de despliegue en una carpeta temporal, ejecute el siguiente comando en la CLI:
mkdir temp-folder; unzip lambda-package.zip -d temp-folder ;cd temp-folder;ls -l
Nota: Sustituya lambda-package.zip por el nombre del archivo del paquete de despliegue y temp-folder por el nombre de la carpeta temporal.
-
Actualice los permisos de los archivos de la biblioteca.
Nota: Para que los directorios sean ejecutables y que todos los usuarios puedan leer todos los archivos y carpetas del paquete de despliegue descomprimido, ejecute el comando chmod:$ sudo chmod 644 $(find -type f) && chmod 755 $(find -type d)
Para que los archivos del paquete de despliegue descomprimidos sean ejecutables en versiones ejecutables compiladas, ejecute el siguiente comando:
$ chmod 755 -R
-
Tras corregir los permisos, ejecute el siguiente comando para volver a empaquetar los archivos y la carpeta en un nuevo archivo .zip:
zip -r new-lambda-package.zip *

Contenido relevante
- preguntada hace 2 meseslg...
- preguntada hace 2 meseslg...
- Como solucionar el error: Supplied Policy document is breaching Cloudwatch Logs policy length limit.Respuesta aceptadapreguntada hace 3 meseslg...
- preguntada hace 3 meseslg...
- preguntada hace un meslg...
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace 5 meses
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 4 años