Se .zip
requiere un archivo para incluir módulos npm en Lambda. Y realmente no debería usar el editor web Lambda para nada, ya que con cualquier código de producción, debe desarrollar localmente, comprometerse con git, etc.
MI FLUJO:
1) Mis funciones Lambda suelen ser utilidades auxiliares para un proyecto más grande, por lo que creo un directorio / aws / lambdas dentro de ese para alojarlas.
2) Cada directorio lambda individual contiene un archivo index.js que contiene el código de función, un archivo package.json que define las dependencias y un subdirectorio / node_modules . (Lambda no utiliza el archivo package.json, es solo para que podamos ejecutar el npm install
comando localmente ).
package.json:
{
"name": "my_lambda",
"dependencies": {
"svg2png": "^4.1.1"
}
}
3) .gitignore todos los directorios node_modules y archivos .zip para que los archivos generados a partir de las instalaciones npm y la compresión no abarroten nuestro repositorio.
.gitignore:
# Ignore node_modules
**/node_modules
# Ignore any zip files
*.zip
4) Ejecuto npm install
desde el directorio para instalar módulos, y desarrollo / pruebo la función localmente.
5) Comprimo el directorio lambda y lo subo a través de la consola.
( IMPORTANTE: ¡No utilice la utilidad 'comprimir' de Mac del Finder para comprimir el archivo! Debe ejecutar zip desde la CLI desde la raíz del directorio; consulte aquí )
zip -r ../yourfilename.zip *
NOTA:
Puede tener problemas si instala los módulos de nodo localmente en su Mac, ya que algunos módulos específicos de la plataforma pueden fallar cuando se implementan en el entorno basado en Linux de Lambda. (Ver https://stackoverflow.com/a/29994851/165673 )
La solución es compilar los módulos en una instancia EC2 iniciada desde la AMI que corresponde con el tiempo de ejecución de Lambda Node.js que está utilizando (consulte esta lista de tiempos de ejecución de Lambda y sus respectivas AMI ).
Consulte también AWS Lambda Deployment Package en Node.js - AWS Lambda