È .zip
necessario un file per includere i moduli npm in Lambda. E davvero non dovresti usare l'editor web Lambda per quasi tutto - come con qualsiasi codice di produzione, dovresti sviluppare localmente, impegnarti a git, ecc.
IL MIO FLUSSO:
1) Le mie funzioni Lambda sono di solito utilità di supporto per un progetto più ampio, quindi creo una directory / aws / lambdas all'interno di quella per ospitarle .
2) Ogni singola directory lambda contiene un file index.js contenente il codice funzione, un file package.json che definisce le dipendenze e una sottodirectory / node_modules . (Il file package.json non è utilizzato da Lambda, è solo per poter eseguire localmente il npm install
comando.)
package.json:
{
"name": "my_lambda",
"dependencies": {
"svg2png": "^4.1.1"
}
}
3) I .gitignore tutte le directory node_modules e i file .zip in modo che i file generati dalle installazioni di npm e zippando non ingombrino il nostro repository.
.gitignore:
# Ignore node_modules
**/node_modules
# Ignore any zip files
*.zip
4) Corro npm install
dalla directory per installare i moduli e sviluppo / collaudo la funzione localmente.
5) Ho .zip la directory lambda e caricarlo tramite la console.
( IMPORTANTE: non utilizzare l'utilità 'comprimi' di Mac dal Finder per comprimere il file! È necessario eseguire zip dalla CLI dalla radice della directory, vedere qui )
zip -r ../yourfilename.zip *
NOTA:
Potresti riscontrare problemi se installi i moduli del nodo localmente sul tuo Mac, poiché alcuni moduli specifici della piattaforma potrebbero non funzionare quando vengono distribuiti nell'ambiente Lambda basato su Linux. (Vedi https://stackoverflow.com/a/29994851/165673 )
La soluzione è quella di compilare i moduli su un'istanza EC2 lanciata dall'AMI che corrisponde al runtime Lambda Node.js che stai utilizzando (consulta questo elenco di runtime Lambda e le rispettive AMI ).
Vedi anche Pacchetto di distribuzione AWS Lambda in Node.js - AWS Lambda