Wie behebe ich den Fehler „Unable to import module“, der auftritt, wenn ich Lambda-Code in Python ausführe?

Lesedauer: 3 Minute
0

Ich möchte den Fehler „Unable to import module“ beheben, wenn ich Python-Code in einer AWS Lambda-Funktion ausführe.

Kurzbeschreibung

Du erhältst die Fehlermeldung „Unable to import module“, wenn die Lambda-Umgebung die angegebene Bibliothek in deinem Lambda-Bereitstellungspaket nicht finden kann.

Um diesen Fehler zu beheben, erstelle ein Bereitstellungspaket mit allen erforderlichen Bibliotheken. Oder erstelle eine Lambda-Ebene mit den erforderlichen Bibliotheken und hänge die Ebene an deine Lambda-Funktion an. Anschließend kannst du die Ebene für mehrere Lambda-Funktionen wiederverwenden.

Lösung

Erstelle eine Lambda-Ebene, um sie an mehrere Lambda-Funktionen anzuhängen

Hinweis: Wenn du die Lambda-Ebene erstellst, lege die Bibliotheken in die Ordner /python oder python/lib/python3.x/site-packages. Es hat sich bewährt, eine Lambda-Ebene auf demselben Betriebssystem zu erstellen, auf dem deine Lambda-Laufzeit basiert. Python 3.12 basiert beispielsweise auf einem Amazon Linux 2023 Amazon Machine Image (AMI). Erstelle die Ebene also auf einem Amazon Linux 2023-Betriebssystem.

Wenn die Amazon Elastic Compute Cloud (Amazon EC2)-Instance die Berechtigung hat, den API-Aufruf PublishLayerVersion zum Hochladen von Lambda-Ebenen zu verwenden, fahre mit Schritt 5 fort.

Führe die folgenden Schritte aus:

  1. Verwende die Amazon EC2-Konsole, um eine Instance mit Amazon Linux 2023 AMI zu erstellen. Oder verwende die AWS Cloud9-Konsole.

  2. Erstelle eine AWS Identity and Access Management (IAM, Identiäts- und Zugriffsmanagement)-Richtlinie, die Berechtigungen zum Aufrufen der API-Operation PublishLayerVersion gewährt.

    Beispiel für eine IAM-Richtlinie:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": "lambda:PublishLayerVersion",
                "Resource": "*"
            }
        ]
    }
  3. Erstelle eine IAM-Rolle und hänge die IAM-Richtlinie an die Rolle an.

  4. Hänge die IAM-Rolle an die EC2-Instance an.

  5. Stelle eine Verbindung zu deiner Instance oder der AWS Cloud9-Umgebung her.

  6. Führe die folgenden Befehle aus, um einen neuen Ordner zu erstellen, und verwende pip, um die Bibliothek mit dem Namen „numpy“ zu installieren:

    mkdir -p lambda-layer/pythoncd lambda-layer/python
    pip3 install --platform manylinux2014_x86_64 --target . --python-version 3.12 --only-binary=:all: numpy

    **Hinweis:**Aktualisiere den Plattformparameter für deinen Funktionstyp. Für eine x86\ _64 Lambda-Funktion setze den Wert auf manylinux2014\ _x86\ _64. Für eine arm64-Funktion setze den Wert auf manylinux2014\ _aarch64. Aktualisiere den Parameter python-version auf dieselbe Version, die deine Lambda-Funktion verwendet.

  7. Führe den folgenden Befehl aus, um den Inhalt des Python-Ordners in eine layer.zip-Datei zu packen:

    cd ..zip -r layer.zip python
  8. Führe den folgenden Befehl aus, um die Lambda-Ebene zu veröffentlichen:

    aws lambda publish-layer-version --layer-name numpy-layer --zip-file fileb://layer.zip --compatible-runtimes python3.12 --region us-east-1

    Hinweis: Ersetze us-east-1 durch die AWS-Region, in der sich deine Lambda-Funktion befindet.

  9. Füge die Ebene zur Lambda-Funktion hinzu.

  10. Importiere das Paket und drucke die Version aus, um deine Lambda-Funktion zu testen.
    Beispielausgabe:

import jsonimport numpy


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

Ähnliche Informationen

Wie installiere ich Python-Bibliotheken in Amazon EMR- und Amazon EMR Serverless-Clustern und behebe Fehler?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Monaten