LoginSignup
1
3

More than 3 years have passed since last update.

AWS Lambda Nodejsのバージョンが8から12に強制アップデートされたら Error: Cannot find module 'jmespath' と出る問題

Posted at

要約

AWS Lambdaで利用するnodejsのバージョンが nodejs8 -> nodejs10以降のアップデートすると aws-sdkが組みこまれるようになるため
node_modulesにaws-sdkを含んでいるとエラーになるので、取り除く必要がある

本文

nodejs8で書かれたAWS Lambdaスクリプトは非推奨となりました。
AWS Lambdaのnodejs10やnodejs12環境で同じスクリプトを実行すると、以下のようなエラーメッセージが表示される。

{"errorType":"Runtime.ImportModuleError","errorMessage":"Error: Cannot find module 'jmespath'","stack":["Runtime.ImportModuleError: Error: Cannot find module 'jmespath'","    at _loadUserApp (/var/runtime/UserFunction.js:100:13)","    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)","    at Object.<anonymous> (/var/runtime/index.js:36:30)","    at Module._compile (internal/modules/cjs/loader.js:701:30)","    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)","    at Module.load (internal/modules/cjs/loader.js:600:32)","    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)","    at Function.Module._load (internal/modules/cjs/loader.js:531:3)","    at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)","    at startup (internal/bootstrap/node.js:283:19)"]}

モジュール'jmespath'自体はpackage.jsonをみても見つからない、普通のモジュールの場合は、 requireの書き方を修正しすればよいが、
aws-sdkの場合は対応が異なる

# この様になっているものを
var aaa = require('foobar')

# このように相対パスを指定してあげれば良い
var aaa = require('./foobar')

node_moduleを使ってaws-sdk下記のように呼び出している場合は aws-sdk を node_modulesから削除する必要がある

var aws = require('aws-sdk');

aws-sdkを取り除くyarnの場合

yarn remove aws-sdk

aws-sdkを取り除くnpmの場合

npm uninstall aws-sdk

nodejs10 から lambda に aws-sdk が追加されました。 see: https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3