web-dev-qa-db-ja.com

aws-lambdaモジュールが見つかりません

Zipファイルからコードをアップロードするときに、aws-lambdaコンソールでこのエラーが発生し続けます。他のZipファイルをアップロードしてみましたが、正常に機能します。 .jsファイルの名前は、Zipファイルで「CreateThumbnail.js」です。ハンドラーの名前も「CreateThumbnail.handler」と適切に命名されていると思います。 node_modulesサブディレクトリもセットアップされます。誰もが考えていますか?

{
  "errorMessage": "Cannot find module 'CreateThumbnail'",
  "errorType": "Error",
  "stackTrace": [
  "Function.Module._resolveFilename (module.js:338:15)",
  "Function.Module._load (module.js:280:25)",
  "Module.require (module.js:364:17)",
  "require (module.js:380:17)"
  ]
}
16
Daniel Munoz

これを機能させる方法は次のとおりです。

  1. ファイルにexports.jsという名前を付けます
  2. ファイル内のハンドラーにexports.handlerという名前を付けます
  3. ラムダ構成のハンドラーをexports.handlerに設定します
  4. フォルダー自体ではなく、フォルダーの内容のみを圧縮し(上記のとおり)、Zipファイルの名前をexports.Zipに変更します。
15
Aaron

わかりました。AWSがアップロードしたファイルを解凍し、次の名前で.jsファイルを見つけようとするので、.jsファイルがフォルダー内に収まらないようにZipを作成してください。あなたが与えたハンドラ、およびフォルダ内にある場合、それはあなたを助けません。

この正確なエラーは、zipファイルに全世界の読み取り許可がない場合に表示される可能性があります。 (chmod -R ugo+r)。

圧縮する前にファイルのアクセス許可を確認してください。これは残念ながらAWSによって強調されておらず、多くの人に多くの頭痛の種を引き起こしています。

4
Catalin Ciurea

一部のライブラリファイルにはグローバル読み取り機能がないため、ラムダはコンテンツを読み取ってコンテンツをビルドできません。

パッケージ化する前に、node_modulesのすべてのファイルが読み取り可能であることを確認してください。

chmod -R +r node_modules

次に、Zipでアップロードします。

1
Leon li

Node_modules dirにあるビルドしたカスタムモジュールでこの問題が発生しました。 Win10マシンでのテストではすべて正常に実行されましたが、アップロードしても同じ「モジュール 'モジュール名'が見つかりません」というエラーが表示され続けました。

ミスマッチがあることがわかりました。見つからなかったモジュールのpackage.json行は次のとおりです。

"main": "./build/modulename.js",

実際のファイル名は次のとおりです。

Modulename.js

大文字と小文字を区別; Windowsはそうではなく、Linux(したがってAWS)もそうです。

1
DonPedro

これは私にとってシンプルなものでした。

取得できましたが、インデックスを作成できません。私の場合、exports.handlerを含むメインのラムダファイルはindex.jsと呼ばれる必要がありました

メインファイルCreateThumbnail.jsを呼び出してみてください

0
CarlPWilliams

ファイル名:
app.js
「app.js」のLambda関数:
exports.handler = function(event、context)...
AmazonコンソールのLambdaハンドラー:
app.handler({app} .js + exports。{handler} = app.handler

フォルダを解凍すると、次が表示されます。
app.js
node_modules

0
Barbaros Alp

チュートリアルでは、Zipファイルに次のアイテムを含めるよう指示しています。

CreateThumbnail.js
/node_modules/gm
/node_modules/async

考慮に入れないのは、パッケージの一部である必要がある2つのパッケージ(gm、async)の依存関係があることです。

そのため、次のことを行う必要があります。

  1. ディレクトリをプロジェクトフォルダーのnode_modulesフォルダーに変更し、コマンド「npm install gm async」を実行します。これにより、gm、async、およびそのすべての依存関係がこのフォルダーにインストールされます。
  2. 'CreateThumbnail.js'ファイルとcomplete 'node_modules'フォルダーをZipファイルにパッケージ化し、アップロードします。これで動作するはずです。

したがって、完全なパッケージは次のようになります。

CreateThumbnail.js
/node_modules/.bin
/node_modules/array-parallel
/node_modules/array-series
/node_modules/async
/node_modules/cross-spawn
/node_modules/debug
/node_modules/gm
/node_modules/isexe
/node_modules/lodash
/node_modules/lru-cache
/node_modules/ms
/node_modules/pseudomap
/node_modules/which
/node_modules/yallist
0
Kirmani

これは無関係ですが、グーグルは私をここに連れてきました。

AWSはエラーを表示します:

Unable to import module '<myfile>': Error

私にとって本当に起こっていたことは、それが存在しないJSファイルを必要としていたことでした。エラーは少し誤解を招くです。

0
Fábio Santos

AWS Lambdaはファイルの名前とハンドラー関数の名前を使用するため、_index.js_という名前のファイルでexports.myHandler = function(event, context)のようにハンドラーを定義した場合、ハンドラーは_index.myHandler_です。

0
Esdras Mayrink

考えられる問題の1つは、PowerShellで作成されたZipファイルとしてラムダをアップロードする場合ですCompress-ArchiveCompress-Archiveにはバグがあります これにより、AWSはファイルをフラットツリー(サブディレクトリなし)に抽出し、ファイル名にバックスラッシュを付けます。

enter image description here

0
Roman Starkov