¿Cómo puedo solucionar el error «Unable to import module» que se muestra cuando uso código Python en Lambda?

3 minutos de lectura
0

Quiero resolver el error «Unable to import module» cuando uso código Python en una función de AWS Lambda.

Descripción corta

El error «Unable to import module» se muestra cuando el entorno de Lambda no puede encontrar la biblioteca especificada en tu paquete de despliegue de Lambda.

Para solucionar este error, crea un paquete de despliegue con todas las bibliotecas necesarias. O bien, crea una capa de Lambda con las bibliotecas necesarias y adjunta la capa a la función de Lambda. A continuación, puedes reutilizar la capa en varias funciones de Lambda.

Resolución

Creación de una capa de Lambda para asociarla a varias funciones de Lambda

Nota: Al crear la capa de Lambda, coloca 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, crea la capa en un sistema operativo Amazon Linux 2023.

Si tu instancia de Amazon Elastic Compute Cloud (Amazon EC2) tiene permiso para usar la llamada a la API PublishLayerVersion para cargar capas de Lambda, continúa con el paso 5.

Sigue estos pasos:

  1. Utiliza la consola de Amazon EC2 para crear una instancia con la AMI de Amazon Linux 2023. Como alternativa, utiliza la consola de AWS Cloud9.

  2. Crea 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 política de IAM:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": "lambda:PublishLayerVersion",
                "Resource": "*"
            }
        ]
    }
  3. Crea un rol de IAM y, a continuación, asocia la política de IAM al rol.

  4. Asocia el rol de IAM a la instancia.

  5. Conéctate a tu instancia o al entorno de AWS Cloud9.

  6. Usa los siguientes comandos para crear una nueva carpeta y utiliza 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: Actualiza el parámetro platform para tu tipo de función. En el caso de una función de Lambda x86_64, define el valor manylinux2014_x86_64. En el caso de una función arm64, define el valor manylinux2014_aarch64. Actualiza el parámetro python-version a la misma versión que usa la función de Lambda.

  7. Usa el siguiente comando para colocar el contenido de la carpeta python en un archivo layer.zip:

    cd ..  
    zip -r layer.zip python
  8. Usa 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: Sustituye us-east-1 por la región de AWS en la que se encuentre tu función de Lambda.

  9. Agrega la capa a la función de Lambda.

  10. Para probar la función de Lambda, importa el paquete e imprime la versión.
    Resultado de ejemplo:

import json
import numpy

def lambda_handler(event, context):
 print(numpy.__version__)
 return {
 'statusCode': 200,
 'body': json.dumps('Hello from Lambda!')
 }    

Información relacionada

¿Cómo instalo y soluciono los problemas de las bibliotecas de Python en los clústeres de Amazon EMR y Amazon EMR sin servidor?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 7 meses