web-dev-qa-db-ja.com

nodejsでモジュール 'handler'awslambda関数をインポートできません

このエラーが発生し続けますが、原因がわかりません。

条件に基づいて別のAPIに投稿するAPIを使用していますが、ラッピングAPIでこのエラーが発生します。

これがコードです...

handler.js

'use strict';
const axios = require('axios');

module.exports.thumbnailWrapperAPI = (event, context, callback) => {


  const incomingData = JSON.parse(event.body);
  if(incomingData.source.includes('png') || incomingData.source.includes('jpg')){
    const newLocal = 'some endpoint...';
    // call image resizing API...
    axios.post(newLocal,{
      source: incomingData.source,
      target: incomingData.target,
      width: incomingData.width
    })
    .then(response => callback(null,response))
    .catch(error => callback(error))

  } else if(incomingData.source.includes('html')) {
    // handle HTML
  } else {
    //...
  };
};

serverless.yaml

service: thumbnailWrapperAPI 
provider:
  name: aws
  runtime: nodejs8.10
  region: eu-west-1

functions:
  thumbnailWrapperAPI:
    handler: handler.thumbnailWrapperAPI
    events:
      - http:
          path: generatethumbnail/
          method: post
          cors: true

何かアドバイスをいただければ幸いです。

エラーメッセージ:

Unable to import module 'handler': Error
    at Function.Module._resolveFilename (module.js:547:15)
    at Function.Module._load (module.js:474:25)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/var/task/handler.js:2:15)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
4
squeekyDave

わかりました。package.jsonを削除してから再度追加し、[〜#〜] not [〜#〜]をdev依存関係としてインストールすることで、問題を解決しました。

4
squeekyDave

エラーメッセージはあまり役に立ちませんが、このメッセージは多くの場合、npmパッケージが失われたことが原因であることがわかりました。 AWSコンソールでラムダをテストすると、特定の詳細を確認できます。

8
aarkerio

私の場合、ラムダにpythonとnodejsの両方を使用しましたが、nodejsラムダ関数のランタイム環境をnodejsとして設定していませんでした。以前はサーバーレス)。 ymlこれに似ています:

provider:
  name: aws
  runtime: python3.7
  stage: dev
  region: eu-west-1 
  profile: my-profile

functions:
  nodejs-func:
    handler: nodejs_func.handler
    events:
      - websocket:
          route: nodejs-func
  python-func:
    handler: python_func.handler
    events:
      - websocket:
          route: python-func

これを解決するには、nodejsラムダのランタイム環境を指定するだけです。

provider:
  name: aws
  runtime: python3.7
  stage: dev
  region: eu-west-1 
  profile: my-profile

functions:
  nodejs-func:
    handler: nodejs_func.handler
    runtime: nodejs10.x # Provide the runtime environment for lambda func
    events:
      - websocket:
          route: nodejs-func
  python-func:
    handler: python_func.handler
    events:
      - websocket:
          route: python-func
1

間違ったパスを使用するモジュールまたはファイルが必要な場合にも、このエラーが発生します。言い換えれば、存在しないモジュール/ファイルを必要とします。

カスタムモジュールまたはnpmの場合があります。

すべてのモジュールインポートパスを再確認して、それらが正確であることを確認してください。

1
The Oracle