Cuando intento ejecutar mi código de AWS Lambda en Python, se muestra el error «Unable to import module».
Breve descripción
El error «Unable to import module» se muestra cuando el entorno de AWS Lambda no puede encontrar la biblioteca especificada en su paquete de despliegue de Lambda.
Para solucionar este error, cree un paquete de despliegue con todas las bibliotecas necesarias. Como alternativa, cree una capa de Lambda con las bibliotecas necesarias y asóciela a la función de Lambda. El método de la capa de Lambda le permite reutilizar esta capa en varias funciones de Lambda.
Solución
Creación de una capa de Lambda para asociarla a varias funciones de Lambda
Nota: Al crear la capa de Lambda, coloque las bibliotecas en las carpetas /**python ** o python/lib/python3.x/site-packages. Se recomienda crear una capa de Lambda en el mismo sistema operativo en el que se basa la versión ejecutable de Lambda. Por ejemplo, Python 3.12 se basa en una imagen de máquina de Amazon (AMI) de Amazon Linux 2023. Por lo tanto, cree la capa en un sistema operativo Amazon Linux 2023.
Si su instancia de Amazon Elastic Compute Cloud (Amazon EC2) no tiene permisos para cargar capas de Lambda mediante la llamada a la API PublishLayerVersion, siga los pasos 1 a 3. Si la instancia ya tiene los permisos, continúe con el paso 4.
-
Utilice la consola de Amazon EC2 para crear una instancia con la AMI de Amazon Linux 2023. Como alternativa, utilice la consola de AWS Cloud9.
-
Cree una política de AWS Identity and Access Management (IAM) que otorgue permisos para llamar a la operación de la API PublishLayerVersion.
Ejemplo de instrucción de política de IAM:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "lambda:PublishLayerVersion",
"Resource": "*"
}
]
}
-
Cree un rol de IAM y, a continuación, asocie la política de IAM al rol.
-
Asocie el rol de IAM a la instancia.
-
Conéctese a su instancia o al entorno de Cloud9.
-
Ejecute los siguientes comandos para crear una nueva carpeta y utilice pip para instalar la biblioteca llamada «numpy»:
mkdir -p lambda-layer/python
cd lambda-layer/python
pip3 install --platform manylinux2014_x86_64 --target . --python-version 3.12 --only-binary=:all: numpy
Nota: Actualice el parámetro platform para su tipo de función. En el caso de una función de Lambda x86_64, defina el valor manylinux2014_x86_64. En el caso de una función arm64, defina el valor manylinux2014_aarch64. Actualice el parámetro python-version a la misma versión que usa la función de Lambda.
-
Ejecute el siguiente comando para colocar el contenido de la carpeta python en un archivo layer.zip:
cd ..
zip -r layer.zip python
Ejecute el siguiente comando para publicar la capa de Lambda:
aws lambda publish-layer-version --layer-name numpy-layer --zip-file fileb://layer.zip --compatible-runtimes python3.12 --region us-east-1
Nota: Sustituya us-east-1 por la región de AWS en la que se encuentre su función de Lambda.
-
Añada la capa a la función de Lambda.
-
Para probar la función de Lambda, importe el paquete e imprima la versión.
Ejemplo de resultado satisfactorio:
import json
import numpy
def lambda_handler(event, context):
print(numpy.__version__)
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}