Estoy tratando de crear una función lambda simple y me encuentro con un error.
Mi código es básicamente
console.log('Loading function'); exports.handler = function(event, context) { console.log('value1 =', event.key1); console.log('value2 =', event.key2); console.log('value3 =', event.key3); context.succeed(event.key1); // Echo back the first key value // context.fail('Something went wrong'); }en un archivo helloworld.js. Lo comprimo y lo cargo como un archivo zip en la sección de creación de una función lambda, y sigo recibiendo este error:
{ "errorMessage": "Cannot find module 'index'", "errorType": "Error", "stackTrace": [ "Function.Module._resolveFilename (module.js:338:15)", "Function.Module._load (module.js:280:25)", "Module.require (module.js:364:17)", "require (module.js:380:17)" ] }¿Alguien tiene alguna idea?
El nombre de su archivo debe coincidir con el nombre del módulo en la configuración del controlador . En este caso, su controlador debe establecerse en helloworld.handler , donde helloworld es el archivo que se requeriría () y el 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.
No haga clic derecho y comprima el directorio , en su lugar, seleccione los archivos individuales como index.js , package.json y el directorio node_modules y haga clic 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.
Podría 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, haga lo siguiente:
$ zip function.zip index.js package.json node_modules adding: index.js (deflated 47%) adding: package.json (deflated 36%) adding: node_modules/ (stored 0%)Con Finder , si 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.
Usando la 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 de la function de subdirectorio, la cagó .
$ zipinfo function.zip | grep index.js | more -rw-r--rw- 3.0 unx 1428 tx defN 27-Jul-16 12:21 index.jsTenga en cuenta que index.js no está dentro de una subcarpeta, este archivo zip funcionará en AWS Lambda .
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 > function@1.0.0 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.
3) Crea nuestra lambda
$ aws lambda create-function --function-name "your_lambda_name" --zip-file fileb://lambda.zip --handler index.handler --runtime nodejs6.10 --timeout 15 --role COPY_HERE_YOUR_ARN_FROM_THE_STEP_2
¡Hemos terminado!