4

我在使用無服務器框架獲取要在AWS Lambda中加載的節點模塊時出現問題。我的一個節點包使用本機庫,所以我使用EC2創建node_module文件夾,然後將它們複製到我的無服務器項目中。一切正常,如果我手動壓縮該項目,並上傳到AWS LAMBDA,但如果我用serverless deploy沒有指定的神器,我得到有關模塊的錯誤(具體爲:ELF file's phentsize not the expected size關於.node文件)無服務器NodeJS /本機node_modules

我試着加入excludeDevDependencies: false這使得部署更大,但仍然給我錯誤。目前,它只在我壓縮項目文件夾的內容並將該文件指定爲要上載的工件時纔有效。有沒有不同的方式來獲得帶有本地綁定的節點模塊以使用無服務器進行部署?

更新:關閉排除開發依賴關係後,使用serverless package進行打包並檢查展開的無文件無服務器創建,我發現打包版本中.o和.a文件的文件大小與原版的。這是正常的嗎?

enter image description here

+0

你的本地庫是.so嗎? –

+0

我不認爲問題出在圖書館本身,而是更多地與運行'無服務器部署',因爲它的工作原理,如果我手動複製它們。 – arvinkx

+1

我也看到了。使用節點模塊中的圖像文件進行測試,使用'無服務器程序包'進行解壓縮,然後導致無法打開的圖像,而壓縮和解壓縮可以按預期正常工作。 –

回答

0

由於LAMBDA在Linux容器中運行,你應該從一臺Linux機器上運行serverless deploy

這樣,您的本地模塊將針對您的目標架構(即Linux)進行編譯。

要檢查serverless造成的,您可以使用sls packagesls deploy --noDeploy(舊版本)的部署包,並檢查它創建的.serverless目錄。你會在這裏看到一個zip文件,提取它的內容,並從那裏測試代碼。

如果此zip的內容不是您所期望的(與手動複製它們時不一樣),那麼您的文件結構和/或serverless.yml可能有問題。

+0

運行'serverless deploy'時,它是否會再次運行'npm install'?我假設它只是壓縮目錄中的文件(正如文檔所述)。 – arvinkx

+0

你的假設是正確的。 '無服務器部署'只是壓縮目錄。 – dashmug

+0

我的猜測是你的'serverless.yml'和你的項目結構有問題(它們不匹配)。 如果你可以顯示你的'serverless.yml'和你的項目樹結構,那就太棒了。 – dashmug