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)"
]
}
これを機能させる方法は次のとおりです。
わかりました。AWSがアップロードしたファイルを解凍し、次の名前で.jsファイルを見つけようとするので、.jsファイルがフォルダー内に収まらないようにZipを作成してください。あなたが与えたハンドラ、およびフォルダ内にある場合、それはあなたを助けません。
この正確なエラーは、zipファイルに全世界の読み取り許可がない場合に表示される可能性があります。 (chmod -R ugo+r
)。
圧縮する前にファイルのアクセス許可を確認してください。これは残念ながらAWSによって強調されておらず、多くの人に多くの頭痛の種を引き起こしています。
一部のライブラリファイルにはグローバル読み取り機能がないため、ラムダはコンテンツを読み取ってコンテンツをビルドできません。
パッケージ化する前に、node_modules
のすべてのファイルが読み取り可能であることを確認してください。
chmod -R +r node_modules
次に、Zipでアップロードします。
Node_modules dirにあるビルドしたカスタムモジュールでこの問題が発生しました。 Win10マシンでのテストではすべて正常に実行されましたが、アップロードしても同じ「モジュール 'モジュール名'が見つかりません」というエラーが表示され続けました。
ミスマッチがあることがわかりました。見つからなかったモジュールのpackage.json行は次のとおりです。
"main": "./build/modulename.js",
実際のファイル名は次のとおりです。
Modulename.js
大文字と小文字を区別; Windowsはそうではなく、Linux(したがってAWS)もそうです。
これは私にとってシンプルなものでした。
取得できましたが、インデックスを作成できません。私の場合、exports.handlerを含むメインのラムダファイルはindex.jsと呼ばれる必要がありました
メインファイルCreateThumbnail.jsを呼び出してみてください
ファイル名:
app.js
「app.js」のLambda関数:
exports.handler = function(event、context)...
AmazonコンソールのLambdaハンドラー:
app.handler({app} .js + exports。{handler} = app.handler)
フォルダを解凍すると、次が表示されます。
app.js
node_modules
チュートリアルでは、Zipファイルに次のアイテムを含めるよう指示しています。
CreateThumbnail.js
/node_modules/gm
/node_modules/async
考慮に入れないのは、パッケージの一部である必要がある2つのパッケージ(gm、async)の依存関係があることです。
そのため、次のことを行う必要があります。
したがって、完全なパッケージは次のようになります。
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
これは無関係ですが、グーグルは私をここに連れてきました。
AWSはエラーを表示します:
Unable to import module '<myfile>': Error
私にとって本当に起こっていたことは、それが存在しないJSファイルを必要としていたことでした。エラーは少し誤解を招くです。
AWS Lambdaはファイルの名前とハンドラー関数の名前を使用するため、_index.js
_という名前のファイルでexports.myHandler = function(event, context)
のようにハンドラーを定義した場合、ハンドラーは_index.myHandler
_です。
考えられる問題の1つは、PowerShellで作成されたZipファイルとしてラムダをアップロードする場合ですCompress-Archive
。 Compress-Archive
にはバグがあります これにより、AWSはファイルをフラットツリー(サブディレクトリなし)に抽出し、ファイル名にバックスラッシュを付けます。