注意 (tl:dr):一切都在本地運行,但在 lambda 中不起作用。
我在 AWS 中有一個 lambda 函式,當我在本地運行服務器時,一切正常,algolia 的使用是在服務內部進行的,該服務位于我的服務器內部的端點中。我嘗試安裝@algolia/cache-common,但也沒有用。由于此錯誤,對 lambda 的每次呼叫都會使整個應用程式崩潰。有什么辦法可以解決嗎?錯誤如下:
"errorType": "Runtime.ImportModuleError",
"errorMessage": "Error: Cannot find module '@algolia/cache-common'
Require stack:
/opt/nodejs/node_modules/algoliasearch/dist/algoliasearch.cjs.js
/opt/nodejs/node_modules/algoliasearch/index.js
/var/task/dist/api/v1/services/algolia.service.js
/var/task/dist/api/v1/handlers/jobs.handler.js
/var/task/dist/api/v1/controllers/jobs.controller.js
/var/task/dist/api/v1/v1.routes.js
/var/task/dist/api/routes.js
/var/task/dist/serverless.js
/var/runtime/UserFunction.js
/var/runtime/index.js",
"stack": [
"Runtime.ImportModuleError: Error: Cannot find module '@algolia/cache-common'",
"Require stack:",
"- /opt/nodejs/node_modules/algoliasearch/dist/algoliasearch.cjs.js",
"- /opt/nodejs/node_modules/algoliasearch/index.js",
"- /var/task/dist/api/v1/services/algolia.service.js",
"- /var/task/dist/api/v1/handlers/jobs.handler.js",
"- /var/task/dist/api/v1/controllers/jobs.controller.js",
"- /var/task/dist/api/v1/v1.routes.js",
"- /var/task/dist/api/routes.js",
"- /var/task/dist/serverless.js",
"- /var/runtime/UserFunction.js",
"- /var/runtime/index.js",
" at _loadUserApp (/var/runtime/UserFunction.js:202:13)",
" at Object.module.exports.load (/var/runtime/UserFunction.js:242:17)",
" at Object.<anonymous> (/var/runtime/index.js:43:30)",
" at Module._compile (internal/modules/cjs/loader.js:1085:14)",
" at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)",
" at Module.load (internal/modules/cjs/loader.js:950:32)",
" at Function.Module._load (internal/modules/cjs/loader.js:790:12)",
" at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)",
" at internal/main/run_main_module.js:17:47"
]
我使用 algolia 的方式如下:
const applicationId: any = config.get("ALGOLIA.APPLICATION_ID");
const apiKey: any = config.get("ALGOLIA.ADMIN_API_KEY");
const client = algoliasearch(applicationId, apiKey);
const index = client.initIndex("my-actual-index");
我的 lambda 結構是一個 lambda 和 3 個模塊層,適用于我使用的每個庫,但不適用于 algolia。當我觀看 lambda 的包時,我可以看到與 algolia 相關的包
我嘗試安裝確切的包(@algolia/cache-common),但它沒有做任何事情,也嘗試安裝 @types/algolia 但也沒有奏效。
有什么我錯過的嗎?
uj5u.com熱心網友回復:
當您“安裝”依賴項時,就像@algolia/cache-common在本地安裝它們一樣。
您安裝的依賴項不會自動在 AWS Lambda 上可用。與您的應用程式代碼一樣,您的依賴項也需要部署。
這就是為什么它可以在您的本地機器上運行,但不能在 Lambda 中運行。
您沒有寫任何關于如何部署代碼的內容。AWS SAM或無服務器框架等工具通常不僅負責部署應用程式代碼,還負責部署依賴項。
所以我想你是手動部署的。這意味著您很可能還必須將您的node_modules檔案夾部署到 AWS Lambda。
您的部署 ZIP 存檔應如下所示:
node_modules/
index.js
該node_modules檔案夾將有很多子檔案夾等,顯然,您可以擁有多個.js檔案。但是為了這篇文章的目的,我們把它放在那里。
uj5u.com熱心網友回復:
了解您如何構建服務肯定會有所幫助。您的核心服務 lambda 中的 Algolia 模塊是 lambda 還是其中一層?我對層了解不多,但我很好奇如果所有依賴項都捆綁到服務本身中,您是否有同樣的問題?
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/402928.html
標籤:
