サーバーレスフレームワークを使用して、オープンウェザー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);
};
npm install
を実行する前に、作業ディレクトリにserverless deploy
? aws-sdk
ノードモジュールはすべてのラムダ関数で使用できますが、他のすべてのノードの依存関係については、それらをインストールして、デプロイ時にラムダと一緒にパッケージ化する必要があります。
この問題は、サーバーレスリポジトリで役立つ場合があります( https://github.com/serverless/serverless/issues/948 )。
package.json
ですべてをdevDependencies
からdependencies
に移動したときにこのエラーを修正しました。
乾杯
外部依存関係がある場合は、パッケージの展開を行う必要があります。この答えを見てください
参照
http://docs.aws.Amazon.com/lambda/latest/dg/nodejs-create-deployment-pkg.html
複数のラムダ関数をデプロイするサーバーレスフレームワークにも同じ問題があります。次の手順で修正しました
handler: foldername/exports.handler
のようなハンドラーでパスを保持するものは何でもserverless deploy
を実行しますこれはあなたの問題を解決するはずです
同じ問題を得た。サーバーレスノードテンプレートを使用し、npm init
その後。