Comment puis-je ajouter des packages Python avec des binaires compilés à mon package de déploiement et le rendre compatible avec Lambda ?

Lecture de 3 minute(s)
0

J'ai utilisé pip pour installer un package Python qui contient un code compilé. Ma fonction AWS Lambda renvoie à présent le message d'erreur « Unable to import module ».

Brève description

Les packages Python qui contiennent le code compilé comme NumPy et pandas ne sont pas toujours compatibles avec les exécutions Lambda par défaut. Si vous installez ces packages à l'aide de pip, alors ceux-ci vont télécharger et compiler un package de nom de module pour l'architecture de la machine locale. Si vous n'utilisez pas un système d'exploitation Linux, alors votre package de déploiement est incompatible avec les exécutions Lambda Python.

Pour que votre package de déploiement ou votre couche soit compatible avec Lambda sur un système d'exploitation autre que Linux, vous devez exécuter la commande pip install avec manylinux2014 comme valeur du paramètre --platform.

Remarque : les balises macOS --platform ne fonctionnent pas. Par exemple, les balises win_amd64 et macosx_10_6_intel n'installent pas de package de déploiement compatible avec Lambda.

Résolution

Remarque : L'exemple de procédure suivant indique la procédure d'installation de pandas pour l'exécution Lambda Python 3.9 qui s'exécute sur l'architecture x86_64.

  1. Ouvrez une invite de commande. Exécutez ensuite la commande pip suivante pour vous assurer que vous utilisez bien pip 19.3.0 ou une version plus récente :

    pip --version

    Si votre version de pip est plus ancienne que la version 19.3.0, passez à la version la plus récente :

    python3.9 -m pip install --upgrade pip
  2. Installez le fichier .whl du package Python précompilé comme une dépendance dans le répertoire de projet de votre fonction Lambda :

    **Important :**Remplacez my-lambda-function par le nom du répertoire de projet de votre fonction.

    pip install \    
        --platform manylinux2014_x86_64 \
        --target=my-lambda-function \
        --implementation cp \
        --python-version 3.9 \
        --only-binary=:all: --upgrade \
        pandas
  3. Ouvrez le répertoire de projet de votre fonction Lambda. Si vous utilisez macOS, alors exécutez la commande suivante :

    cd my-lambda-function
  4. Créez un nouveau fichier nommé lambda_function.py dans un éditeur de texte. Copiez et collez ensuite l'exemple de code suivant dans le fichier :

    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)

    Enregistrez ensuite ce fichier dans le répertoire de projet de votre fonction Lambda.

  5. Créez une archive de fichiers .zip du package de déploiement Lambda qui regroupe toutes les bibliothèques installées et le code source :

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

    Vous pouvez utiliser l'archive du fichier my-deployment-package.zip pour créer une nouvelle fonction Lambda Python 3.9 ou pour mettre à jour une fonction existante. Pour en savoir plus, référez-vous à la section Utilisation des archives de fichiers .zip pour les fonctions Python Lambda.

    **Remarque :**Vous pouvez utiliser la même procédure pour créer une couche Lambda que vous pouvez utiliser dans plusieurs fonctions. Par exemple, la commande suivante crée une nouvelle couche Lambda pour installer pandas pour l'exécution Lambda Python 3.9 qui s'exécute sur l'architecture arm64 :

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

Informations connexes

Création et partage des couches Lambda

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 10 mois