Direkt zum Inhalt

Wie behebe ich die Fehler „Cannot find module“ oder „Cannot find Package“, wenn ich Lambda-Code in Node.js ausführe?

Lesedauer: 3 Minute
0

Ich erhalte die Fehlermeldung „Cannot find module“ oder „Cannot find Package“, wenn ich AWS Lambda-Code in Node.js ausführe.

Kurzbeschreibung

Wenn die Lambda-Umgebung die angegebene Bibliothek im Code von Node.js nicht finden kann, erhältst du einen der genannten Fehler. Diese Fehler treten auf, weil Lambda nicht mit allen Bibliotheken von Node.js vorverpackt ist.

Lösung

Um diese Fehler zu beheben, erstelle eine Lambda-Ebene, die die Bibliotheken enthält, die du im Node.js-Code verwenden möchtest. Du kannst die Ebene für mehrere Lambda-Funktionen wiederverwenden.

Für Node.js Runtimes 16 und früher unterstützt Lambda keine geschichteten JavaScript-ES-Modulabhängigkeiten. Du musst die Abhängigkeiten in die Bereitstellung einbeziehen. Lambda unterstützt JavaScript-ES-Modulabhängigkeiten für Node.js 24

Jede Lambda-Runtime fügt der PATH-Variablen bestimmte /opt-Verzeichnisordner hinzu. Wenn die Ebene dieselbe Ordnerstruktur verwendet, kann der Code der Lambda-Funktion auf der Ebenen-Inhalt zugreifen, ohne den Pfad anzugeben.

Wichtig: Die Bibliothek, die du für Node.js importierst, muss sich in der Ordnerstruktur nodejs/node_modules befinden.

Es hat sich bewährt, eine Lambda-Ebene auf demselben Betriebssystem zu erstellen, auf dem deine durch Lambda unterstützte Laufzeit basiert. Beispielsweise basieren die aktuellsten Versionen von Node.js auf Amazon Linux 2023 Amazon Machine Images (AMIs).

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Troubleshooting errors for the AWS CLI (Problembehandlung bei der AWS CLI). Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Gehe wie folgt vor, um eine Lambda-Ebene für eine Node.js-Bibliothek zu erstellen:

  1. Erstelle eine Amazon Elastic Compute Cloud (Amazon EC2)-Instance aus einem Amazon Linux 2023-AMI.
  2. Erstelle eine AWS Identity and Access Management (IAM)-Rolle mit Berechtigungen zum Aufrufen der API für die publish-layer-version.
  3. Hänge die IAM-Rolle an die Amazon EC2-Instance an.

Hinweis: Deine Instance verfügt jetzt über Berechtigungen zum Hochladen von Lambda-Ebenen für den API-Aufruf publish-layer-version. Verwende SSH, um eine Verbindung zu deiner EC2-Instance herzustellen. Installiere Node.js, indem du den folgenden curl-Befehl ausführst:

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh
    bash
    $ . ~/.nvm/nvm.sh
    nvm install 24
    ```

6. Erstelle einen ** nodejs**-Ordner:
   ```plaintext
   mkdir nodejs
  1. Installiere die aws-xray-sdk-Bibliothek im Ordner nodejs:

    cd nodejs$ npm init  ***answer all queries for initialization that create a package.json file***
    npm install --save aws-xray-sdk

    Hinweis: Ersetze die Bibliothek aws-xray-sdk durch die Node.js-Bibliothek, die du importieren möchtest.

  2. Erstelle ein Zip-Archiv für die aws-xray-sdk-Bibliothek:

    zip -r layer.zip nodejs

    Hinweis: Die Bibliothek aws-xray-sdk hat das erforderliche Ordnerformat für eine Node.js-Ebene nodejs/node_modules.

  3. Um die Lambda-Ebene zu veröffentlichen, führe den folgenden Befehl publish-layer-version aus:

    aws lambda publish-layer-version --layer-name xray --zip-file fileb://layer.zip --compatible-runtimes nodejs24.x --region your-region

    Hinweis: Ersetze xray durch den Namen deiner Ebene, nodejs24.x durch deine Node.js-Version und your-region durch deine AWS-Region.

Informationen zum Hinzufügen der Module ECMAScript 6 (ES6) oder CommonJS im Code findest du unter JavaScript ES6/CommonJS-Syntax.

Weitere Informationen

Wie behebe ich die Fehler „permission denied“ oder „unable to import module“ beim Hochladen eines Lambda-Bereitstellungspakets?

Wie erstelle ich ein Lambda-Bereitstellungspaket für Node.js?

AWS OFFICIALAktualisiert vor 6 Monaten