Wie behebe ich den Fehler „Modul kann nicht importiert werden“, der auftritt, wenn ich Lambda-Code in Python ausführe?

Lesedauer: 3 Minute
0

Ich erhalte die Fehlermeldung „Modul kann nicht importiert werden“, wenn ich versuche, meinen AWS Lambda-Code in Python auszuführen.

Kurzbeschreibung

Sie erhalten die Fehlermeldung „Modul kann nicht importiert werden“, wenn die AWS Lambda-Umgebung die angegebene Bibliothek in Ihrem Lambda-Bereitstellungspaket nicht finden kann.

Um diesen Fehler zu beheben, erstellen Sie ein Bereitstellungspaket mit allen erforderlichen Bibliotheken. Oder erstellen Sie eine Lambda-Layer mit den benötigten Bibliotheken und hängen Sie sie an Ihre Lambda-Funktion an. Mit der Lambda-Layer-Methode können Sie diese Ebene für mehrere Lambda-Funktionen wiederverwenden.

Behebung

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

Hinweis: Wenn Sie die Lambda-Layer erstellen, platzieren Sie die Bibliotheken in den Ordnern /python oder python/lib/python3.x/site-packages. Es hat sich bewährt, eine Lambda-Layer auf demselben Betriebssystem zu erstellen, auf dem Ihre Lambda-Laufzeit basiert. Python 3.12 basiert beispielsweise auf einem Amazon Linux 2023 Amazon Machine Image (AMI). Erstellen Sie die Layer also auf einem Amazon Linux 2023 OS.

Wenn Ihre Amazon Elastic Compute Cloud (Amazon EC2)-Instance nicht berechtigt ist, Lambda-Layer über den API-Aufruf PublishLayerVersion hochzuladen, folgen Sie den Schritten 1—3. Wenn Ihre Instance bereits über die Berechtigungen verfügt, fahren Sie mit Schritt 4 fort.

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

  2. Erstellen Sie eine AWS-Richtlinie für Identity and Access Management (IAM), die Berechtigungen zum Aufrufen des API-Vorgangs PublishLayerVersion gewährt.
    Beispiel für eine IAM-Grundsatzerklärung:

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

  4. Hängen Sie die IAM-Rolle an die EC2-Instance an.

  5. Stellen Sie eine Verbindung zu Ihrer Instance oder der Cloud9-Umgebung her.

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

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

    **Hinweis:**Aktualisieren Sie den Plattformparameter für Ihren Funktionstyp. Für eine x86\ _64 Lambda-Funktion setzen Sie den Wert auf manylinux2014\ _x86\ _64. Für eine arm64-Funktion setzen Sie den Wert auf manylinux2014\ _aarch64. Aktualisieren Sie den Parameter python-version auf dieselbe Version, die Ihre Lambda-Funktion verwendet.

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

    cd ..
    zip -r layer.zip python

    Führen Sie den folgenden Befehl aus, um den Lambda-Layer 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:**Ersetzen Sie us-east-1 durch die AWS-Region, in der sich Ihre Lambda-Funktion befindet.

  8. Fügen Sie die Ebene zu Ihrer Lambda-Funktion hinzu.

  9. Um Ihre Lambda-Funktion zu testen, importieren Sie das Paket und drucken Sie die Version aus.
    Beispiel für eine erfolgreiche Ausgabe: 

    import json
    import numpy
    
    
    def lambda_handler(event, context):
     print(numpy.__version__)
     return {
     'statusCode': 200,
     'body': json.dumps('Hello from Lambda!')
     }	
AWS OFFICIAL
AWS OFFICIALAktualisiert vor 4 Monaten