web-dev-qa-db-ja.com

AWS Lambdaエラーのサーバーレスフレームワーク「モジュールが見つかりません」

サーバーレスフレームワークを使用して、オープンウェザーNPMモジュールを使用するLambda関数を作成しようとしています。ただし、次の例外が発生しますが、node_modulesには特定のライブラリが含まれています。

私はなんとかサンプルを実行できました( https://github.com/serverless/examples/tree/master/aws-node-rest-api-with-dynamodb )。オープン気象APIを統合するノードモジュール。

Endpoint response body before transformations: {"errorMessage":"Cannot find module 'Openweather-Node'","errorType":"Error","stackTrace":["Module.require (module.js:353:17)","require (internal/module.js:12:17)","Object.<anonymous> (/var/task/todos/weather.js:4:17)","Module._compile (module.js:409:26)","Object.Module._extensions..js

私のコード

'use strict';

  const AWS = require('aws-sdk'); // eslint-disable-line import/no-extraneous-dependencies
  var weather = require('Openweather-Node');

  const dynamoDb = new AWS.DynamoDB.DocumentClient();

  module.exports.weather = (event, context, callback) => {
    const params = {
      TableName: process.env.DYNAMODB_TABLE,
      Key: {
        id: event.pathParameters.id,
      },
    };

    weather.setAPPID("mykey");
    //set the culture
    weather.setCulture("fr");
    //set the forecast type
    weather.setForecastType("daily");

    const response = {
      statusCode: 200,
      body: "{test response}",
    };
    callback(null, response);          
  };
9

npm installを実行する前に、作業ディレクトリにserverless deployaws-sdkノードモジュールはすべてのラムダ関数で使用できますが、他のすべてのノードの依存関係については、それらをインストールして、デプロイ時にラムダと一緒にパッケージ化する必要があります。

この問題は、サーバーレスリポジトリで役立つ場合があります( https://github.com/serverless/serverless/issues/948 )。

15
marcusmolchany

package.jsonですべてをdevDependenciesからdependenciesに移動したときにこのエラーを修正しました。

乾杯

2
user1398619

外部依存関係がある場合は、パッケージの展開を行う必要があります。この答えを見てください

AWS Node JS with Request

参照

http://docs.aws.Amazon.com/lambda/latest/dg/nodejs-create-deployment-pkg.html

1
bibek shrestha

複数のラムダ関数をデプロイするサーバーレスフレームワークにも同じ問題があります。次の手順で修正しました

  1. handler: foldername/exports.handlerのようなハンドラーでパスを保持するものは何でも
  2. フォルダー内のファイルにexports.jsという名前を付けます(ハンドラーに名前を付けたものはすべて)
  3. serverless deployを実行します

これはあなたの問題を解決するはずです

同じ問題を得た。サーバーレスノードテンプレートを使用し、npm initその後。

0
d0utone