2017-11-28 115 views
0

node.js AWS Lambda関数のsqlite3データベースに接続しようとしています。AWS LambdaでSQLite3を実行

Error: Cannot find module '/var/task/node_modules/sqlite3/lib/binding/node-v48-linux-x64/node_sqlite3.node' 
    at Function.Module._resolveFilename (module.js:469:15) 
    at Function.Module._load (module.js:417:25) 
    at Module.require (module.js:497:17) 
    at require (internal/module.js:20:19) 
    at Object.<anonymous> (/var/task/node_modules/sqlite3/lib/sqlite3.js:4:15) 
    at Module._compile (module.js:570:32) 
    at Object.Module._extensions..js (module.js:579:10) 
    at Module.load (module.js:487:32) 
    at tryModuleLoad (module.js:446:12) 
    at Function.Module._load (module.js:438:3) code: 'MODULE_NOT_FOUND' } 

AWSラムダ関数は、ノード-V48-のlinux-x64のフォルダにアクセスするためにtrysようだ:コードは、私はとlocalYそれをテストが、私はAWSラムダにアップロードしたときに、私は次のエラーメッセージを取得するときに完璧に動作します開発用にWindowsを使用しているため、npmのインストールでは表示されません。

誰でもこの問題を解決する方法や、node-v48-linux-x64フォルダの内容を取得する方法を知っていますか?

+0

純粋なJavaScriptで書かれているsqliteパッケージ(https://www.npmjs.com/package/node-sqlite-purejs)を使用しますが、ローカルのLinuxを実行していますか? – dashmug

+0

いいえ、私はローカルにWindowsを持っています –

答えて

0

問題は、あなたのWindowsコンピュータでnpm installを実行してから、このnode_modulesディレクトリをラムダ機能と共にアップロードしたことです。

Windowsコンピュータ上でnpm installを実行すると、基本的にAWS Lambdaが使用するLinuxではなくWindows用のバインディングを使用してsqliteパッケージが構築されます。 Windows用のバインディングはLinuxでは動作しません。

解決策は、Linuxマシンでnpm installを実行してから、このnode_modulesディレクトリ(Linuxで作成)とLambda機能をアップロードすることです。あなたはどちらか、

  • は、WindowsマシンでLinuxのVM(例えばなどVirtualboxの、vagrantを、)を使用し、そこにnpm installを行うことができますことを行うには

  • dockerをローカルに使用してください。
+0

ありがとう! Linux 64Bitでnpm install sqlite3を実行すると、ジョブが実行されました! –