web-dev-qa-db-ja.com

AWS Lambdaエラー:「モジュール '/ var / task / index'が見つかりません」

Node.js Alexa Task Issue

現在、AWS Lambdaを介してNode.js Alexaタスクをコーディングしています。OpenWeatherAPIから情報を受け取り、それを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で何度も実行しましたが、問題なく動作しているようです。ただし、Zipをパッケージに圧縮して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

誰が問題が何であるかを知っていますか?よろしくお願いします。

84

それを修正しました!私の問題は、FinderでMacに組み込まれている圧縮機能を使用してファイルを圧縮しようとしたことです。

私のようなMacユーザーの場合、プロジェクトのルートディレクトリ(index.jsnode_modulesなどのファイルを含むフォルダー)にいるときに、ターミナルで次のスクリプトを実行する必要があります。

Zip -r ../yourfilename.Zip *

Windowsの場合:

Compress-Archive -LiteralPath node_modules, index.js -DestinationPath yourfilename.Zip
217

受け入れられた回答の更新:このエラーが発生した場合、ZipファイルがAWSが必要とする有効な形式ではないことを意味します。

Zipをダブルクリックすると、コードファイル内にフォルダーがありますが、lambdaは、Zipをダブルクリックすると直接コードファイルが表示されることを望んでいます

これを達成するには:

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

次に、index.ZipをAWS Lambdaにアップロードします。

22
Ashutosh Jha

ファイル名とハンドラー名が同じであることを確認します。

In this case we expect that all our code will be in <code>bundle.ls</code> file

つまり、Zipファイルには、handler関数をエクスポートするbundle.jsファイルがあります。

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

これはおそらく、展開Zip内のファイルに関する権限の問題です。 Zipファイルにパッケージ化する前に、ファイルをchmod 777試してください。

4
spg

私の場合は、内部のsrcディレクトリにハンドラーファイルがあるためです。

Lambda内の「Handler」プロパティを以下から変更する必要がありました。

index.handler

src/index.handler
3
Pete

私の場合、アーカイブにはindex.jsファイルを含むフォルダー「src」が含まれていたため、ハンドラー「src/index.handler」に配置する必要がありました。

enter image description here

2

Windowsでlambci/lambda:nodejs8.10を使用していたときにこのエラーが発生しました。

上記のすべての解決策を試しましたが、どれも問題に対処するのに役立ちませんでした(エラースタックが質問と同じに見えても)。

これが私の簡単な解決策です。

  1. --entrypointフラグを使用してコンテナを実行し、ファイルがコンテナにマウントされているかどうかを確認します。 Docker Desktopで共有ドライブの問題が発生する可能性があります。
  2. その前日にドッカーデーモンを切り替えましたが、この問題を除いてすべて正常に動作します。
  3. とにかく、ドライブをDocker Desktopに再マウントします。両方ともdockerコマンドを使用するか、Docker Desktopの設定を開いて適用するだけです。
0
James

私の場合、私は交換しなければなりませんでした

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

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