Eine .zip
Datei ist erforderlich, um npm- Module in Lambda aufzunehmen. Und Sie sollten den Lambda-Webeditor wirklich nicht für vieles verwenden - wie bei jedem Produktionscode sollten Sie sich lokal entwickeln, sich zu Git verpflichten usw.
MEIN FLOW:
1) Meine Lambda-Funktionen sind normalerweise Hilfsdienstprogramme für ein größeres Projekt, daher erstelle ich darin ein Verzeichnis / aws / lambdas , um sie unterzubringen .
2) Jedes einzelne Lambda-Verzeichnis enthält eine index.js- Datei mit dem Funktionscode, eine package.json- Datei, die Abhängigkeiten definiert, und ein Unterverzeichnis / node_modules . (Die Datei package.json wird von Lambda nicht verwendet, nur damit wir den npm install
Befehl lokal ausführen können .)
package.json:
{
"name": "my_lambda",
"dependencies": {
"svg2png": "^4.1.1"
}
}
3) Ich .gitignore alle node_modules-Verzeichnisse und .zip-Dateien, damit die aus npm-Installationen und Zippen generierten Dateien unser Repo nicht überladen.
.gitignore:
# Ignore node_modules
**/node_modules
# Ignore any zip files
*.zip
4) Ich laufe npm install
aus dem Verzeichnis heraus, um Module zu installieren und die Funktion lokal zu entwickeln / testen.
5) Ich zippe das Lambda-Verzeichnis und lade es über die Konsole hoch.
( WICHTIG: Verwenden Sie nicht das Dienstprogramm 'compress' von Mac aus dem Finder, um die Datei zu komprimieren! Sie müssen zip über die CLI im Stammverzeichnis des Verzeichnisses ausführen - siehe hier ).
zip -r ../yourfilename.zip *
HINWEIS:
Wenn Sie die Knotenmodule lokal auf Ihrem Mac installieren, können Probleme auftreten, da einige plattformspezifische Module bei der Bereitstellung in der Linux-basierten Umgebung von Lambda möglicherweise fehlschlagen. (Siehe https://stackoverflow.com/a/29994851/165673 )
Die Lösung besteht darin, die Module auf einer vom AMI gestarteten EC2-Instanz zu kompilieren, die der von Ihnen verwendeten Laufzeit von Lambda Node.j entspricht (siehe diese Liste der Lambda-Laufzeiten und ihrer jeweiligen AMIs ).
Siehe auch AWS Lambda-Bereitstellungspaket in Node.js - AWS Lambda