Es imprescindible comprender el código de forma correcta previamente a adaptarlo a tu proyecto si ttienes algo que aportar puedes compartirlo con nosotros.
Solución:
El nombre de su archivo debe coincidir con el nombre del módulo en el Manipulador configuración. En este caso, su controlador debe estar configurado para helloworld.handler
donde helloworld
es el archivo que sería requerido () y handler
es la función exportada. Entonces debería funcionar con el mismo archivo zip.
Asegúrese de que su index.js esté en la raíz del archivo zip y no en un subdirectorio.
En mi caso, tenía el nombre del módulo que coincidía con el nombre del archivo y el controlador exportado, el verdadero problema era macOS y el programa zip que básicamente crea una carpeta dentro del archivo zip, por lo que cuando se descomprime en el motor AWS Lambda, index.js termina en un subdirectorio.
Uso del buscador
No haga clic derecho y comprima el directorioen su lugar seleccione los archivos archivos individuales como índice.js, paquete.json y el node_modules directorio y haga clic con el botón derecho para comprimir, puede terminar con un archivo Archive.zip en el mismo directorio. El nombre del archivo zip no será elegante, pero al menos funcionará cuando lo envíe a AWS Lambda.
Usando la línea de comando
Podrías cometer el mismo error usando la línea de comando con zip -r function.zip function
que básicamente crea un archivo zip con un directorio llamado function
en él, en su lugar haz:
$ zip function.zip index.js package.json node_modules
adding: index.js (deflated 47%)
adding: package.json (deflated 36%)
adding: node_modules/ (stored 0%)
Cómo saber verificar su archivo zip
Utilizando descubridorsi hace doble clic en el archivo zip y se descomprime en un subdirectorio, Lambda no podrá ver el archivo ya que index.js vive en ese subdirectorio.
Utilizando el línea de comando y zipinfo
:
$ zipinfo function.zip | grep index.js | more
-rw-r--rw- 2.1 unx 1428 bX defN 27-Jul-16 12:21 function/index.js
Observe cómo index.js terminó dentro del subdirectorio function
, te equivocaste.
$ zipinfo function.zip | grep index.js | more
-rw-r--rw- 3.0 unx 1428 tx defN 27-Jul-16 12:21 index.js
Tenga en cuenta que index.js no está dentro de una subcarpeta, este archivo zip funcionará en AWS Lambda.
Aprovechando los comandos npm para comprimir la función
Así que agregué un script a mi paquete para comprimir los archivos del proyecto simplemente ejecutando npm run zip
"name": "function",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts":
"zip": "zip function.zip package.json *.js node_modules"
,
"dependencies":
"aws-sdk": "^2.4.10"
$ npm run zip
> [email protected]
zip
> zip function.zip package.json *.js node_modules
adding: package.json (deflated 41%)
adding: index.js (deflated 47%)
adding: local.js (deflated 42%)
adding: node_modules/ (stored 0%)
Aquí hay una forma avanzada con AWS CLI. Le ahorrará tiempo en el uso a largo plazo.
En primer lugar, debe instalar y configurar AWS CLI:
http://docs.aws.amazon.com/cli/latest/userguide/installing.html
1) Crear un archivo
$ zip -r lambda *
Creará para nosotros un archivo lambda.zip con todas las carpetas y archivos en nuestra ubicación actual.
2) Obtener el ARN del rol
$ aws iam list-roles | grep “tu_rol”
Nos devolverá el ARN que usaremos con nuestra lambda. Deberías crearlo con tus manos.
Ejemplo de lista de roles
3) Crea nuestra lambda
$ función de creación de aws lambda –nombre de la función “tu_nombre_lambda” –archivo zip archivob://lambda.zip –manipulador index.handler –tiempo de ejecución nodejs6.10 –se acabó el tiempo 15 –papel COPIA_AQUÍ_TU_ARN_DE_EL_PASO_2
¡Hemos terminado!
Reseñas y puntuaciones del artículo
Nos encantaría que puedieras recomendar este post si te fue útil.