AWS Lambda 오류 :“ '/ var / task / index'모듈을 찾을 수 없습니다.”


87

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

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


여기에 내 코드에 대한 로그 출력은 다음과 같습니다 START RequestId: 46c71292-debf-11e6-a013-1be2c415a9c1 Version: $LATEST Unable to import module 'index': Error at Function.Module._resolveFilename (module.js:325:15) at Function.Module._load (module.js:276:25) at Module.require (module.js:353:17) at require (internal/module.js:12:17) END RequestId: 46c71292-debf-11e6-a013-1be2c415a9c1 REPORT RequestId: 46c71292-debf-11e6-a013-1be2c415a9c1 Duration: 55.76 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 16 MB
안토니 Krivonos

3
Mac에서 터미널을 사용하여 압축하는 방법에 대한 답변 외에도 코드 파일이 'index.js'인지 확인하십시오. 내 이름이 좀 더 설명적인 이름으로 오류가 발생했습니다.
Art

1
@Art 이것은 내 문제였습니다. test.js를 압축했는데 처리되지 않은 오류가 발생했습니다. index.js로 변경 한 후 제대로 작동했습니다. 감사.
Hudspeth

답변:


229

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

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

zip -r ../yourfilename.zip *

Windows의 경우 :

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

7
나는 이렇게 압축했다 : "zip -r folder folder.zip"그리고 물론 이것은 실패했다. 단지에 대한 팁을위한 감사 파일이 아닌 디렉토리에 압축
덴마크 맥컬리

6
창문은 어때?
Alok Rajasukumaran

또한 기능의 이름을해야합니다index.js
지식

디렉토리 외부에서이 작업을 수행 할 수있는 방법이 있습니까?
andrhamm

1
@andrhamm 예. 형식은 zip -r /path/to/destination.zip /path/to/source/directory/*입니다. 그러면 디렉토리의 내용이 압축됩니다. 디렉토리 자체도 압축하려면 * .txt없이 / path / to / source / directory를 사용하십시오.
Qaz

23

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

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

이를 달성하려면 :

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

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


Windows git bast에서 "명령을 찾을 수 없음"오류를 던지고,이 문제를 해결하는 방법은 무엇입니까?
Pardeep Jain

1
이것은 Ubuntu의 명령입니다. Windows 용 Google 또는 명령 프롬프트에서 zip을 만드는 방법
Ashutosh Jha

20

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

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

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

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

4

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

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

index.handler

...에

src/index.handler

나는 또한 이것에 뛰어 들었다; [Windows] 단순히 API내 저장소 의 일부를 마우스 오른쪽 버튼으로 클릭 하고 Send To > Compressed Folder. 이것은 구조를 가진 zip을 생성 api/etc하므로 예외입니다!
C Bauer

3

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


2
불행히도 문제가 해결되지 않는 것 같습니다. planyr다른 폴더 내의 폴더를 압축하려고 시도했습니다 . 내 핸들러 이름과 기본 JavaScript 파일 이름이 일치합니다 ( index).
안토니 Krivonos

chmod 777이것은 나쁜 조언입니다 ... 이것은 쓰기, 읽기 및 실행 권한을 공개적으로 여는 것입니다. 항상 문제의 경로 원인을 찾으십시오. 인터넷에서 누군가가 당신에게하라고 지시하는 모든 것을 실행하는 것이 보안에 미치는 영향을 항상 이해하려고 노력하십시오. 보안은 중요하며 기본적으로 코드에 있어야합니다.
Exadra37

3

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

여기에 이미지 설명 입력


0

제 경우에는

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

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

0

lambci/lambda:nodejs8.10Windows 에서 사용할 때이 오류가 발생 했습니다.

나는 위에 나열된 모든 솔루션을 시도했지만 어느 것도 내 문제를 처리하는 데 도움이되지 않았습니다 (오류 스택이 질문과 동일하게 보임에도 불구하고).

내 간단한 해결책은 다음과 같습니다.

  1. --entrypoint플래그를 사용하여 컨테이너를 실행하여 파일이 컨테이너에 마운트되었는지 확인합니다. Docker Desktop에서 드라이브 공유 문제가 발생했을 수 있습니다.
  2. 나는 그 전날 내 도커 데몬을 전환했지만이 문제를 제외하고는 모든 것이 잘 작동합니다.
  3. 어쨌든 내 드라이브를 Docker Desktop에 다시 마운트하면 docker명령을 사용 하거나 Docker Desktop 설정을 열어 적용 할 수 있습니다.

0

제 경우에는 노드가 메모리 부족으로 인해 발생했습니다. --memory-size 1500aws lambda create-function ...명령 에 추가 하여 수정했습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.