[javascript] AWS Lambda 오류 :“ ‘/ var / task / index’모듈을 찾을 수 없습니다.”

Node.js Alexa 작업 문제

저는 현재 AWS Lambda를 통해 Node.js Alexa 작업을 코딩하고 있으며 OpenWeather API에서 정보를 수신하고이를라는 변수로 구문 분석하는 함수를 코딩하려고했습니다 weather. 관련 코드는 다음과 같습니다.

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);
}

이 스 니펫을 Cloud9 및 기타 IDE에서 수없이 실행했으며 완벽하게 작동하는 것 같습니다. 그러나 패키지에 압축하여 AWS Lambda에 업로드하면 다음 오류가 발생합니다.

{
    "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)"
    ]
}

나는 수많은 기사를 샅샅이 뒤지고 module-js, request 및이 ​​코드를 실행해야하는 다른 많은 Node 모듈을 설치했지만이 문제를 해결할 수있는 것은 없습니다. 다음은 경우에 대비하여 내 디렉토리입니다.

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

문제가 무엇인지 아는 사람이 있습니까? 미리 감사드립니다.



답변

고쳤다! 내 문제는 Finder에서 Mac의 내장 압축 기능을 사용하여 파일을 압축하려고 시도했다는 것입니다.

당신은 맥 사용자의 경우 당신이 (당신 포함 된 폴더 프로젝트의 루트 디렉토리에있을 때, 나처럼, 당신은 터미널에서 다음 스크립트를 실행해야합니다 index.js, node_modules등 파일).

zip -r ../yourfilename.zip *

Windows의 경우 :

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


답변

허용 된 답변 업데이트 : 이 오류가 발생하면 zip 파일이 AWS에서 요구하는 유효한 형식이 아님을 의미합니다.

zip을 두 번 클릭하면 코드 파일 내에서 폴더를 찾을 수 있지만 람다는 zip을 두 번 클릭하면 직접 코드 파일이 표시되기를 원합니다.

이를 달성하려면 :

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

그런 다음 index.zipAWS Lambda에 업로드 합니다.


답변

파일 이름과 핸들러 이름이 동일한 지 확인하십시오.

이 경우 모든 코드가 <code> bundle.ls </ code> 파일에있을 것으로 예상합니다.

즉, 해당 zip파일에는 기능 bundle.js을 내보내는 파일이 handler있습니다.

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


답변

제 경우에는 내부 src 디렉토리에 핸들러 파일이 있었기 때문입니다.

Lambda 내에서 ‘Handler’속성을 다음과 같이 변경해야했습니다.

index.handler

…에

src/index.handler


답변

이는 배포 zip 내의 파일에 대한 권한 문제 일 수 있습니다. chmod 777zip 파일로 패키징하기 전에 파일을 사용해보십시오 .


답변

제 경우에는 아카이브에 index.js 파일이있는 “src”폴더가 포함되어 있으므로 “src / index.handler”핸들러에 넣어야했습니다.

여기에 이미지 설명 입력


답변

제 경우에는

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

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