nodejs node listobjects aws apiversion javascript node.js amazon-web-services request aws-lambda

javascript - node - aws-sdk typescript



Error de AWS Lambda: "No se puede encontrar el módulo ''/ var/task/index''" (8)

Node.js Alexa Task Issue

Actualmente estoy codificando una Node.js Alexa Task a través de AWS Lambda, y he estado tratando de codificar una función que recibe información de la API de OpenWeather y la analiza en una variable llamada weather . El código relevante es el siguiente:

var request = require(''request''); var weather = ""; function isBadWeather(location) { var endpoint = "http://api.openweathermap.org/data/2.5/weather?q=" + location + "&APPID=205283d9c9211b776d3580d5de5d6338"; var body = ""; request(endpoint, function (error, response, body) { if (!error && response.statusCode == 200) { body = JSON.parse(body); weather = body.weather[0].id; } }); } function testWeather() { setTimeout(function() { if (weather >= 200 && weather < 800) weather = true; else weather = false; console.log(weather); generateResponse(buildSpeechletResponse(weather, true), {}); }, 500); }

Ejecuté este fragmento innumerables veces en Cloud9 y otros IDEs, y parece estar funcionando sin problemas. Sin embargo, cuando lo comprimo en un paquete y lo subo a AWS Lambda, aparece el siguiente error:

{ "errorMessage": "Cannot find module ''/var/task/index''", "errorType": "Error", "stackTrace": [ "Function.Module._load (module.js:276:25)", "Module.require (module.js:353:17)", "require (internal/module.js:12:17)" ] }

Revisé innumerables artículos e instalé module-js, request y muchos otros módulos Node que deberían hacer que este código se ejecute, pero nada parece solucionar este problema. Aquí está mi directorio, por si acaso:

- planyr.zip - index.js - node_modules - package.json

¿Alguien sabe cuál podría ser el problema? Muchas gracias de antemano.


¡Arreglado! Mi problema fue que intenté comprimir el archivo usando la función de compresión incorporada de mi Mac en Finder.

Si es usuario de Mac, como yo, debe ejecutar el siguiente script en la terminal cuando se encuentre en el directorio raíz de su proyecto (carpeta que contiene sus archivos index.js , node_modules , etc.).

zip -r ../yourfilename.zip *

Para ventanas:

Compress-Archive -LiteralPath node_modules, index.js -DestinationPath yourfilename.zip


En mi caso fue porque tenía el archivo del controlador en el directorio src interno.

Tuve que cambiar la propiedad ''Handler'' dentro de Lambda de:

index.handler

a

src/index.handler


En mi caso tuve que reemplazar

exports.handler = function eventHandler (event, context) {

con

exports.handler = function (event, context, callback) {


En mi caso, el archivo contenía una carpeta "src" con el archivo index.js, así que tuve que poner al controlador: "src / index.handler"


Este es probablemente un problema de permisos con archivos dentro de su zip de implementación. Pruebe chmod 777 sus archivos antes de empaquetarlos en un archivo zip.


Recibí este error cuando estaba usando lambci/lambda:nodejs8.10 en Windows.

Intenté todas las soluciones enumeradas anteriormente, pero ninguna de ellas me ayudó a resolver mi problema (aunque la pila de errores se parece a la pregunta).

Aquí está mi solución simple:

  1. usando el indicador --entrypoint para ejecutar un contenedor para averiguar si el archivo está montado en el contenedor. Resulta que es posible que tenga el problema de unidad compartida con mi Docker Desktop.
  2. Cambié mi docker daemon ese día antes, pero todo funciona bien, excepto este problema.
  3. De todos modos, vuelva a montar mi disco en Docker Desktop, ambos pueden usar el comando docker o simplemente abrir la configuración de Docker Desktop para aplicar.

Verifique que el nombre del archivo y el nombre del controlador sean iguales:

Eso significa que zip archivo zip tiene bundle.js archivo bundle.js que exporta la función del handler :

exports.handler = (event, context, callback) => {//...}


Actualice a la respuesta aceptada: cuando se produce este error, significa que su archivo zip no tiene la forma válida que requiere AWS.

Si hace doble clic en zip, encontrará su carpeta dentro de su archivo de código, pero lambda quiere que cuando haga doble clic en zip debe mostrar archivos de código directo.

Lograr esto:

open terminal cd your-lambda-folder zip -r index.zip *

Luego, suba index.zip a AWS Lambda.