AWS Lambda error : Unable to import module 'index'
多くの場合、node_modulesにコードが利用したいモジュールが入っていないことでUnable to import module 'blah blah'といったエラーがでます。
コード例:
//index.js
let hoge = require('Hoge')
エラー例:
Unable to import module 'Hoge': Error
しかし module 'index'
とは!
この場合は、次の理由が考えられます。
LambdaにアップロードするZIPファイルの問題
これは私の場合ubuntu環境からWindows環境に移したときに起きました。
わたしのubuntuでフツーに使用しているpackage.json
、それを以下のように書いて、
npm run deploy
のコマンドで一発でLambdaにアップロードできるようにしているのですが、
//package.json
・・・前略・・・
"scripts": {
"deploy": "aws lambda update-function-code --function-name arn:aws:lambda:ap-northeast-1:012334455667:function:auto_Hoge --zip-file fileb://Lambda-Deployment.zip",
"predeploy": "zip -r Lambda-Deployment.zip * -x *.zip *.json *.log"
},
・・・後略・・・
問題なのはこの中の、"predeploy":
に記述してあるコマンド。
zip -r Lambda-Deployment.zip * -x *.zip *.json *.log
この部分、ZIPコマンドはWindowsでは使えないということで、Windowsのコマンドプロンプトでzipコマンドを使用可能にする方法を参考にして使用可能にしました。それでZIP化するようにしてnpm run deploy
でLambdaにアップロードし実行したところ、Unable to import module 'index'
エラーが出て使い物になりませんでした。
(ZIPが問題だとわかるまで長い長い道程でした・・・人生とは遠き道程を歩くがごとし。徳川家康)
そのZIP化したファイルの中を覗いてみても、特におかしなところはなさそうです。
ちなみに、PowerShellのCompress-Archiveでなんとかしようと思いましたが、さらに迷宮入りしました。