Comment charger des modules npm dans AWS Lambda?
J'ai créé plusieurs Lambda fonctions à l'aide du site web de l'éditeur. So far So good. Maintenant, j'aimerais commencer l'extension de ceux avec des modules (tels que Q pour des promesses). Je ne peux pas comprendre comment obtenir les modules à Lambda de sorte qu'ils peuvent être consommés par mes fonctions.
J'ai lu à travers cette mais il semble être la création d'une EC2 et en cours d'exécution Lambda fonctions à partir de là. Il existe un mécanisme pour télécharger un zip lors de la création d'une fonction, mais qui semble impliquer l'envoi des fonctions développées localement. Depuis que je travaille dans le web en fonction de l'éditeur qui semble comme un étrange flux de travail.
Comment puis-je tout simplement déployer des modules pour les utiliser dans mes fonctions Lambda?
- Il est expliqué dans les docs ici - docs.aws.amazon.com/lambda/latest/dg/...
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas charger les modules NPM sans téléchargement d'une
.zip
fichier, mais vous pouvez réellement obtenir ce processus vers le bas pour les deux lignes de commande.Voici comment:
Mettre votre fonction Lambda fichier(s) dans un répertoire séparé. C'est parce que vous installez
npm
packages localement pour Lambda et vous voulez être en mesure d'isoler et de tester ce qui vous permettra de charger à Lambda.Installer vos packages NPM localement avec
npm install packageName
pendant que vous êtes dans votre séparée Lambda répertoire que vous avez créé à l'étape 1.Assurez-vous que votre fonction lors de l'exécution en local:
node lambdaFunc.js
(vous pouvez simplement commenter les deuxexport.handler
lignes dans votre code pour adapter votre code à exécuter avec le Noeud localement).Aller à la Lambda répertoire et de compresser le contenu, assurez-vous que pas pour inclure le répertoire lui-même.
Si vous avez la
aws-cli
installés, je suggère d'avoir si vous voulez faire de votre vie plus facile, vous pouvez maintenant saisir cette commande:(pas de guillemets autour de la lambdaFunc partie ci-dessus dans le cas où vous vous demandez comme je l'ai fait)
Vous pouvez maintenant cliquer sur test dans le Lambda de la console.
Je suggère l'ajout d'un alias pour les deux commandes ci-dessus. Voici ce que j'ai dans la mienne pour le beaucoup plus Lambda commande de mise à jour:
aws lambda update-function-code --function-name lambdaFunc --region eu-west-1 --zip-file fileb://~/path/to/your/lambdaFunc.zip
recime-cli
(recime.io), cela permettra de créer de la fonction lambda, nœud installer des modules(including native)
, de publier et de vous donner l'url de soutien GET/POST. Bien qu'il soit conçu pour les robots et a de soutien à l'intégration, mais il prend également en charge de la SCRO, par conséquent, vous pouvez l'utiliser comme un agent.zip
fichier n'est pas unrar
. A dû passer par beaucoup, avant que je compris.--zip-file fileb://
contre--zip-file file://
tout en utilisant ces étapeszip -rq $archive * && aws lambda update-function-code --function-name $function --zip-file fileb://$archive
, ce qui signifie que vous pourriez faire archive=/tmp/archive.zip fonction=my_function une fois, puis il suffit d'appeler l'alias à la fois de zip et de les déployer en même temps.--zip-file fileb:
au lieu defile
pour moi. 2) sur MacOS il semble être avec 3 barres obliques commefileb:///Users/wio/Documents
Un
.zip
fichier est nécessaire afin d'inclure mnp modules Lambda. Et vous ne devriez vraiment pas être à l'aide de la Lambda web de l'éditeur pour beaucoup de n'importe quoi - comme avec n'importe quel code de production, vous devriez être en développement local, en s'engageant à git, etc.MON FLOW:
1) Mon Lambda fonctions sont généralement helper utilitaires pour un projet plus grand, j'ai donc créer un /aws/lambdas répertoire à l'intérieur de cette maison pour eux.
2) Chaque individu lambda répertoire contient une index.js fichier contenant le code de la fonction, un paquet.json fichier de définition des dépendances, et un /node_modules sous-répertoire. (Le paquet.fichier json n'est pas utilisé par Lambda, c'est juste afin que nous puissions exécuter localement la
npm install
de commande.)paquet.json:
3) j' .gitignore tous node_modules répertoires et .zip fichiers ainsi que les fichiers générés à partir de la ngp s'installe et la compression de ne pas encombrer notre repo.
.gitignore:
4) j'ai installer les modules, de développer et de tester localement
5) j' .zip le lambda de répertoire et de les télécharger via la console.
(IMPORTANT: Ne pas utiliser de Mac "comprimer" utilitaire de recherche à zip le fichier! Vous devez exécuter zip à partir de la CLI à partir de l'intérieur de la racine de l'annuaire - voir ici)
Voir aussi AWS Lambda Package de Déploiement dans Node.js - AWS Lambda
REMARQUE:
Vous pourriez avoir un problème dans lequel un module de PhantomJS construit OS binaires, et donc le nœud paquet construit localement sur OSX finit par échouer en Lambda.
La réponse que j'ai trouvé ici était d'utiliser ces scripts à construire à l'intérieur d'un conteneur Docker.
Espère que cette aide, avec cadre sans serveur vous pouvez faire quelque chose comme ceci:
plugins:
- serverless-webpack
custom:
webpackIncludeModules:
forceInclude:
- <your package name> (for example: node-fetch)
2. Créez ensuite votre fonction Lambda, de le déployer par
serverless deploy
, le package inclus dans l'abonnement sans serveur.yml sera là pour vous.Pour plus d'informations sur l'abonnement sans serveur: https://serverless.com/framework/docs/providers/aws/guide/quick-start/
Vous pouvez maintenant utiliser Lambda Couches pour cette matière. Il suffit d'ajouter un calque contenant le paquet dont vous avez besoin et cela fonctionnera parfaitement.
Suivre ce post:
https://medium.com/@anjanava.biswas/nodejs-runtime-environment-with-aws-lambda-layers-f3914613e20e