Un .zip
fichier est requis pour inclure les modules npm dans Lambda. Et vous ne devriez vraiment pas utiliser l'éditeur Web Lambda pour beaucoup de choses - comme pour tout code de production, vous devriez développer localement, vous engager dans git, etc.
MON FLUX:
1) Mes fonctions Lambda sont généralement des utilitaires d'aide pour un projet plus vaste, je crée donc un répertoire / aws / lambdas dans celui-ci pour les héberger.
2) Chaque répertoire lambda individuel contient un fichier index.js contenant le code de la fonction, un fichier package.json définissant les dépendances et un sous-répertoire / node_modules . (Le fichier package.json n'est pas utilisé par Lambda, c'est juste pour que nous puissions exécuter la npm install
commande localement .)
package.json:
{
"name": "my_lambda",
"dependencies": {
"svg2png": "^4.1.1"
}
}
3) Je .gitignore tous les répertoires node_modules et les fichiers .zip afin que les fichiers générés à partir des installations et de la compression de npm n'encombrent pas notre dépôt.
.gitignore:
# Ignore node_modules
**/node_modules
# Ignore any zip files
*.zip
4) Je cours npm install
depuis le répertoire pour installer des modules et développer / tester la fonction localement.
5) Je .zip le répertoire lambda et le télécharge via la console.
( IMPORTANT: n'utilisez pas l'utilitaire de compression de Mac à partir du Finder pour compresser le fichier! Vous devez exécuter zip à partir de la CLI depuis la racine du répertoire - voir ici )
zip -r ../yourfilename.zip *
REMARQUE:
Vous pouvez rencontrer des problèmes si vous installez les modules de nœuds localement sur votre Mac, car certains modules spécifiques à la plate-forme peuvent échouer lorsqu'ils sont déployés dans l'environnement Linux de Lambda. (Voir https://stackoverflow.com/a/29994851/165673 )
La solution consiste à compiler les modules sur une instance EC2 lancée à partir de l'AMI qui correspond au runtime Lambda Node.js que vous utilisez (voir cette liste des runtimes Lambda et leurs AMI respectives ).
Voir aussi Package de déploiement AWS Lambda dans Node.js - AWS Lambda