[解決済み】AWS lambda function エラー - モジュール 'index' をインポートできません。エラー
質問内容
nodejsでlambdaを作ろうとしています。ドキュメントに従って、私はラムダ関数、node_modules、package.jsonを含むzipファイルを作成しました。私のラムダzipファイルの構造は次のとおりです。
my-lambda-function/
|
|---util/
| |
| |--util-1.js
| |--util-2.js
|---api/
| |
| |--api-call-1.js
| |--api-call-2.js
|
|---config
| |
| |--env/
| | |--env-file-1.js
| |
| |--config-file-1.js
| |--config-file-2.js
|
|---node_modules/
| |
| |--module-1/
| |--module-2/
|---index.js
|---package.json
このZIPファイルを作成するために、gulpのタスクを使っています。
gulp.task('zip', ['test'], () => {
const buildArtifact = ['index.js', 'package.json', 'util/**',
'config/**', 'api/**'];
Object.keys(pjson.dependencies).forEach((dep) => {
buildArtifact.push(`node_modules/${dep}/**/*`);
});
const zipFile = `${pjson.name}.zip`;
return gulp.src(buildArtifact, { base: '.' })
.pipe(zip(zipFile))
.pipe(gulp.dest('build'));
});
このラムダはlambda-localでローカルに実行されています。しかし、テスト中にこのラムダはエラーを投げます。
Unable to import module 'index': 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/node_modules/ioredis/built/utils/lodash.js:2:19)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
現在のエラーはioredisモジュール(node_moduesフォルダにあります)を指していますが、コードからioredisの使用を削除すると(ioredisのimportを削除する)、エラーは別のノードモジュールに変わります。
私のラムダ関数が node_modules をロード/検索できないようです。 lambdaがnpmのインストールに失敗しているのが原因でしょうか?
数日前から悩んでいるので、解決するためのポインタがあれば助かります
ありがとうございます。
詳細
- node_modules フォルダを削除し、ローカルでラムダを実行すると、エラーを再現することができます。
- 依存関係をすべて削除すると、些細なロギング文が機能するようになります。
- ラムダはawsのnode 8.10を使用しています。
回答 (@Kannaiyan)
zipタスクを変更する。
gulp.task('npm-install', () => gulp.src('./package.json')
.pipe(gulp.dest('build/'))
.pipe(install({ production: true })));
が動作しました。
解決方法は?
<ブロッククオートモジュール 'index' をインポートできません。エラー
依存関係の一部が正しくインストールされていない/パッケージ化されていないようです。node_modules ディレクトリを削除して、モジュールを再インストールしてください。
npm install
は問題を解決するはずです。
ドキュメントに記載されているように、関数がパッケージ化されていることを確認します。 https://docs.aws.amazon.com/lambda/latest/dg/nodejs-create-deployment-pkg.html
バンドルに node_module がない場合、このエラーになります。
EDIT1です。
gulpのパッケージングに問題があるようです。
次の例は、gulpでlambdaをパッケージングするための完全なドキュメントを持っています。
https://medium.com/@AdamRNeary/a-gulp-workflow-for-amazon-lambda-61c2afd723b6
お役に立てれば幸いです。
関連
-
[解決済み】ExpressJSとMeteorJSの比較【終了しました
-
[解決済み】npx コマンドが見つかりません。
-
[解決済み】ENOENT, そのようなファイルまたはディレクトリがありません。
-
[解決済み】Mongooseで配列の値を更新する方法
-
[解決済み】NPMインストールエラー:解析中の予期せぬJSON入力の終了 '...nt-webpack-plugin": "0'' 付近。
-
[解決済み】npm 5で作成されたpackage-lock.jsonファイルはコミットするのでしょうか?
-
[解決済み] のエラーが発生しました。これはおそらくnpmの問題ではありません。上に追加のログ出力があると思われます
-
[解決済み] bodyParser は非推奨です express 4
-
[解決済み] Mongoose Schema がモデルとして登録されていません。
-
[解決済み] AWS Lambda関数が別の関数を呼び出すことは可能か?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み】Google spreadsheet api Requestに不十分な認証スコープがあった。
-
[解決済み】MongoDBのデータ/DBが見つからない
-
[解決済み】ブロックスコープの宣言は、ストリクトモード以外ではまだサポートされていません。
-
[解決済み】Mongooseで配列の値を更新する方法
-
[解決済み] のエラーが発生しました。これはおそらくnpmの問題ではありません。上に追加のログ出力があると思われます
-
[解決済み] Passport JSのreq.isAuthenticated()はどのように実装されていますか?[クローズド]
-
[解決済み] ReferenceError: describe は定義されていません NodeJs
-
[解決済み] express は `body-parser deprecated undefined extended` としてエラーを投げます。
-
[解決済み] Json Web Token verify() return jwt malformed