4

Serverless Frameworkを使用してAWS Lambdaでノードモジュールをロードする際に問題が発生しました。私のノードパッケージの1つはネイティブライブラリを使用するので、EC2を使ってnode_moduleフォルダを作成し、それを私のServerlessプロジェクトにコピーしました。 (:.nodeファイルのファイルに関するELF file's phentsize not the expected size特異的に)Serverless NodeJS /ネイティブのノードモジュール

私はexcludeDevDependencies: falseを追加しようとした私は、手動でプロジェクトを圧縮し、AWSラムダにアップロードする場合はすべてが動作しますが、私は指定されたアーティファクトなしserverless deployを使用している場合、私はモジュールに関するエラーが出ます展開が大きくなりますが、それでもエラーが表示されます。現在のところ、プロジェクトフォルダの内容を圧縮し、アップロードするアーティファクトとしてそのファイルを指定した場合にのみ機能します。ネイティブ・バインディングを持つノード・モジュールをServerlessでデプロイする別の方法はありますか?

アップデート:serverless packageを使用してパッケージ化し、展開したzipファイルserverlessを調べると、パッケージ化されたバージョンでは、.oファイルと.aファイルのファイルサイズが異なります元の。これは正常ですか?

enter image description here

+0

ネイティブライブラリは.soですか? –

+0

私は問題はライブラリそのものとは思えませんが、手作業でコピーすると 'serverless deploy'が動作するようになっています。 – arvinkx

+1

私もこれを見ています。ノードモジュール内のイメージファイルでテストすると、 'serverless package'が続いて解凍されると、開くことができないイメージが生成されますが、zipやunzippingは期待どおりに動作します。 –

答えて

2

私はこの問題に遭遇し、掘り下げました。サーバレスのv1.21.0がバイナリのパッケージングを破ったことが判明しました。

https://forum.serverless.com/t/serverless-1-21-0-breaks-sharp-library/2606

https://github.com/serverless/serverless/issues/4182

推奨修正はv1.21.1にアップグレードすることです。

+2

良い発見。この回答を更新することができます。彼らは 'serverless v1.21.1'をリリースしました。 – dashmug

0

ラムダは、Linuxコンテナ上で動作するので、あなたはLinuxマシンからserverless deployを実行する必要があります。

このようにして、ネイティブモジュールはLinuxのターゲットアーキテクチャ用にコンパイルされます。

serverlessが作成し、あなたが(古いバージョンの)sls packageまたはsls deploy --noDeployを使用し、それが作成する.serverlessディレクトリを検査することができます展開パッケージをチェックします。ここにzipファイルがあり、その内容を抽出し、そこからコードをテストします。

このジップの内容が期待どおりでない場合(手動でコピーしたときと同じではない場合)、ファイルの構造やserverless.ymlに問題がある可能性があります。

+0

'serverless deploy'を実行すると' npm install'をもう一度実行しますか?私はそれがディレクトリ内のファイルを圧縮したという仮定の下にあった(それはドキュメントが述べているように)。 – arvinkx

+0

あなたの前提は正しいです。 'serverless deploy'はディレクトリを圧縮します。 – dashmug

+0

私の推測では、 'serverless.yml'とプロジェクト構造に問題があります(一致しません)。 あなたの 'serverless.yml'とあなたのプロジェクトツリー構造が素晴らしいものであればそれを表示できます。 – dashmug

関連する問題