Wie behebe ich die Fehler „Modul kann nicht gefunden werden“ oder „Paket kann nicht gefunden werden“, wenn ich Lambda-Code in Node.js ausführe?

Lesedauer: 3 Minute
0

Ich erhalte die Fehlermeldung „Modul kann nicht gefunden werden“ oder „Paket kann nicht gefunden werden“, wenn ich AWS Lambda-Code in Node.js ausführe.

Kurzbeschreibung

Wenn Ihre Lambda-Umgebung die angegebene Bibliothek im Code von Node.js nicht finden kann, erhalten Sie einen dieser Fehler. Diese Fehler treten auf, weil Lambda nicht mit allen Bibliotheken von Node.js vorverpackt ist.

  • Wenn bei CommonJS ein Modul fehlt, erhalten Sie die folgende Fehlermeldung: Runtime.ImportModuleError: Fehler: Modul kann nicht gefunden werden.
  • Wenn bei JavaScript ES6 ein Modul fehlt, erhalten Sie die folgende Fehlermeldung: **Fehler \ [ERR\ _MODULE\ _NOT\ _FOUND]: Paket kann nicht gefunden werden. **

Um diese Fehler zu beheben, erstellen Sie ein Bereitstellungspaket oder eine Lambda-Ebene, die die Bibliotheken enthält, die Sie in Ihrem Node.js-Code verwenden möchten.

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

Gehen Sie wie folgt vor, um eine Lambda-Ebene zu erstellen. Erstellen Sie einen Lambda-Ebene anstelle eines Bereitstellungspakets, damit Sie die Ebene für mehrere Lambda-Funktionen wiederverwenden können. Jede Lambda-Runtime fügt der PATH-Variablen bestimmte /opt-Verzeichnisordner hinzu. Wenn die Ebene dieselbe Ordnerstruktur verwendet, kann der Code Ihrer Lambda-Funktion auf den Ebenen-Inhalt zugreifen, ohne den Pfad anzugeben.

**Wichtig:**Die Bibliothek, die Sie für Node.js importieren, muss sich in der Ordnerstruktur nodejs/node\ _modules befinden.

Lösung

Es hat sich bewährt, eine Lambda-Ebene auf demselben Betriebssystem zu erstellen, auf dem Ihre Lambda-Runtime basiert. Beispielsweise basieren alle Versionen von Node.js auf Amazon Linux 2 Amazon Machine Images (AMI).

Erstellen Sie einen Lambda-Ebene für eine Node.js-Bibliothek:

  1. Erstellen Sie eine Amazon Elastic Compute Cloud (Amazon EC2)-Instance aus einem Amazon Linux 2-AMI.

  2. Erstellen Sie eine AWS Identity and Access Management (IAM)-Rolle mit Berechtigungen zum Aufrufen der API für die publish-layer-version. Hängen Sie dann die IAM-Rolle an die EC2-Instance an.

**Hinweis:**Ihre EC2-Instance verfügt jetzt über Berechtigungen zum Hochladen von Lambda-Ebenen für den API-Aufruf zur publish-layer-version.

  1. Stellen Sie eine Verbindung zu Ihrer EC2-Instance her und installieren Sie dann Node.js:
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
$ . ~/.nvm/nvm.sh
$ nvm install node
  1. Erstellen Sie einen ** nodejs**-Ordner:
$ mkdir nodejs
  1. Installieren Sie die aws-xray-sdk-Bibliothek im Ordner nodejs:
$ cd nodejs
$ npm init  ***answer all queries regarding initialization that create a package.json file***
$ npm install --save aws-xray-sdk

**Hinweis:**Ersetzen Sie die aws-xray-sdk-Beispielbibliothek durch die Bibliothek Node.js, die Sie importieren möchten.

  1. Erstellen Sie ein Zip-Archiv für die aws-xray-sdk-Bibliothek:
$ zip -r layer.zip nodejs

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

  1. Veröffentlichen Sie die Lambda-Ebene:
$ aws lambda publish-layer-version --layer-name xray --zip-file fileb://layer.zip --compatible-runtimes nodejs12.x --region us-east-1

**Hinweis:**Informationen zum Hinzufügen der Module ECMAScript 6 (ES6) oder CommonJS in Ihren Codelesatz finden Sie unter JavaScript ES6/CommonJS-Syntax.

Ähnliche Informationen

Wie behebe ich die Fehler „Zugriff verweigert“ oder „Modul kann nicht importiert werden“ beim Hochladen eines Lambda-Bereitstellungspakets?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr