Wie füge ich Python-Pakete mit kompilierten Binärdateien zu meinem Bereitstellungspaket hinzu und mache das Paket mit Lambda kompatibel?

Lesedauer: 3 Minute
0

Ich habe pip verwendet, um ein Python-Paket zu installieren, das kompilierten Code enthält, und jetzt gibt meine AWS Lambda-Funktion den Fehler „Unable to import module“ zurück.

Kurzbeschreibung

Python-Pakete, die kompilierten Code enthalten, wie NumPy und Pandas, sind standardmäßig nicht immer mit Lambda-Laufzeiten kompatibel. Wenn Sie diese Pakete mit Pip installieren, laden die Pakete ein module name-Paket für die Architektur des lokalen Computers herunter und kompilieren es. Wenn Sie kein Linux-Betriebssystem (OS) verwenden, ist Ihr Bereitstellungspaket dadurch nicht mit Lambda-Python-Laufzeiten kompatibel.

Um Ihr Bereitstellungspaket oder Ihre Bereitstellungsebene mit Lambda auf einem Nicht-Linux-Betriebssystem kompatibel zu machen, führen Sie den Befehl „pip install“ mit manylinux2014 als Wert für den --platform parameter aus.

Hinweis: macOS --platform-Tags funktionieren nicht. Beispielsweise installieren die win_amd64 und macosx_10_6_intel-Tags kein Bereitstellungspaket, das mit Lambda kompatibel ist.

Behebung

**Hinweis:**Das folgende Beispielverfahren zeigt, wie Pandas für die Lambda Python 3.9-Runtime installiert wird, die auf der x86\ _64-Architektur ausgeführt wird.

  1. Öffnen Sie eine Befehlszeile. Führen Sie dann den folgenden Pip-Befehl aus, um zu bestätigen, dass Sie eine Version von Pip verwenden, die Version 19.3.0 oder neuer ist:

    pip --version

    Wenn Sie eine Version von Pip verwenden, die älter als Pip-Version 19.3.0 ist, führen Sie ein Upgrade auf die neueste Version von Pip durch:

    python3.9 -m pip install --upgrade pip
  2. Installieren Sie die WHL-Datei des vorkompilierten Python-Pakets als Abhängigkeit im Projektverzeichnis Ihrer Lambda-Funktion:

    **Wichtig:**Ersetzen Sie my-lambda-function durch den Namen des Projektverzeichnisses Ihrer Funktion.

    pip install \    
        --platform manylinux2014_x86_64 \
        --target=my-lambda-function \
        --implementation cp \
        --python-version 3.9 \
        --only-binary=:all: --upgrade \
        pandas
  3. Öffnen Sie das Projektverzeichnis Ihrer Lambda-Funktion. Wenn Sie macOS verwenden, führen Sie den folgenden Befehl aus:

    cd my-lambda-function
  4. Erstellen Sie in einem Texteditor eine neue Datei mit dem Namen lambda_function.py. Kopieren Sie dann den folgenden Beispielcode und fügen Sie ihn in die Datei ein:

    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)

    Speichern Sie diese Datei im Projektverzeichnis Ihrer Lambda-Funktion.

  5. Erstellen Sie ein ZIP-Dateiarchiv für das Lambda-Bereitstellungspaket, das alle installierten Bibliotheken und den Quellcode enthält:

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

    Verwenden Sie das Dateiarchiv my-deployment-package.zip, um entweder eine neue Python 3.9 Lambda-Funktion zu erstellen oder eine bestehende zu aktualisieren. Anweisungen finden Sie unter Working with .zip file archives for Python Lambda functions.

    **Hinweis:**Sie können ein ähnliches Verfahren verwenden, um eine Lambda-Schicht zu erstellen, die für mehrere Funktionen verwendet werden kann. Mit dem folgenden Befehl wird beispielsweise eine neue Lambda-Schicht erstellt, um Pandas für die Lambda Python 3.9-Laufzeit zu installieren, die auf der arm64-Architektur ausgeführt wird:

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

Verwandte Informationen

Lambda-Ebenen erstellen und teilen

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 9 Monaten