¿Cómo agrego paquetes de Python con binarios compilados a mi paquete de despliegue y hago que el paquete sea compatible con Lambda?

3 minutos de lectura
0

Utilicé pip para instalar un paquete de Python que contiene código compilado, y ahora mi función de AWS Lambda muestra el error «Unable to import module».

Breve descripción

Los paquetes de Python que contienen código compilado, como NumPy y pandas, no siempre son compatibles con la versión ejecutable de Lambda de forma predeterminada. Si instala estos paquetes mediante pip, los paquetes descargan y compilan un paquete con nombre de módulo para la arquitectura de la máquina local. Si no utiliza un sistema operativo (SO) Linux, su paquete de despliegue será incompatible con las versiones ejecutables de Lambda Python.

Para que su paquete de despliegue o capa sea compatible con Lambda en un sistema operativo que no sea Linux, ejecute el comando pip install command con manylinux2014 como valor del parámetro --platform parameter.

Nota: Las etiquetas --platform de macOS no funcionan. Por ejemplo, las etiquetas win_amd64 y macosx_10_6_intel no instalan ningún paquete de despliegue compatible con Lambda.

Resolución

Nota: El siguiente ejemplo de procedimiento muestra cómo instalar pandas para la versión ejecutable de Lambda Python 3.9 que se ejecuta en la arquitectura x86_64.

  1. Abra una línea de comandos. A continuación, ejecute el siguiente comando de pip para confirmar que está utilizando una versión de pip que sea la versión 19.3.0 o posterior:

    pip --version

    Si utiliza una versión de pip anterior a la versión 19.3.0 de pip, actualice a la versión más reciente de pip:

    python3.9 -m pip install --upgrade pip
  2. Instale el archivo.whl del paquete Python precompilado como una dependencia en el directorio de proyectos de la función de Lambda:

    Importante: Reemplace my-lambda-function por el nombre del directorio del proyecto de su función.

    pip install \    
        --platform manylinux2014_x86_64 \
        --target=my-lambda-function \
        --implementation cp \
        --python-version 3.9 \
        --only-binary=:all: --upgrade \
        pandas
  3. Abra el directorio de proyectos de la función de Lambda. Si usa macOS, ejecute el siguiente comando:

    cd my-lambda-function
  4. En un editor de texto, cree un archivo nuevo denominado lambda_function.py. A continuación, copie y pegue el siguiente ejemplo de código en el archivo:

    import numpy as np
    import pandas as pd
    def lambda_handler(event, context):
        df2 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),columns=["a", "b", "c"])
        number = np.pi
        print(df2)
        print(number)

    Guarde este archivo en el directorio de proyectos de la función de Lambda.

  5. Cree un archivo .zip del paquete de despliegue de Lambda que incluya todas las bibliotecas y el código fuente instalados:

    zip -r ../my-deployment-package.zip .

    Utilice el archivo my-deployment-package.zip para crear una nueva función de Lambda de Python 3.9 o para actualizar una existente. Para obtener instrucciones, consulte Implementar funciones Python Lambda con archivos .zip.

    Nota: Puede utilizar un procedimiento similar para crear una capa de Lambda que se pueda utilizar en varias funciones. Por ejemplo, el siguiente comando crea una nueva capa de Lambda para instalar pandas para la versión ejecutable de Lambda Python 3.9, que se ejecuta en la arquitectura arm64:

    pip install \
        --platform manylinux2014_aarch64 \
        --target=./python/lib/python3.9/site-packages \
        --implementation cp \
        --python-version 3.9 \
        --only-binary=:all: --upgrade \
        pandas

Información relacionada

Creación y uso compartido de capas de Lambda

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 10 meses