You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda无法找到@elastic/elasticsearch包问题求助

AWS Lambda中无法找到@elastic/elasticsearch包的问题解决

问题描述

在AWS Lambda中运行代码时触发错误:Cannot find package '@elastic/elasticsearch' imported from /var/task/index.mjs,即使尝试添加Elasticsearch Layer到Lambda函数后,仍出现相同错误。

已执行的操作

  • npm install @elastic/elasticsearch
  • mkdir -p my-layer/nodejs/node_modules
  • cp -r node_modules/@elastic my-layer/nodejs/node_modules
  • zip -r my-layer.zip my-layer
  • 创建Layer并关联到Lambda函数

错误堆栈追踪

undefined   ERROR   Uncaught Exception  {"errorType":"Error","errorMessage":"Cannot find package '@elastic/elasticsearch' imported from /var/task/index.mjs","code":"ERR_MODULE_NOT_FOUND","stack":["Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@elastic/elasticsearch' imported from /var/task/index.mjs","    at new NodeError (node:internal/errors:405:5)","    at packageResolve (node:internal/modules/esm/resolve:965:9)","    at moduleResolve (node:internal/modules/esm/resolve:1022:20)","    at moduleResolveWithNodePath (node:internal/modules/esm/resolve:876:12)","    at defaultResolve (node:internal/modules/esm/resolve:1242:79)","    at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:403:12)","    at ModuleLoader.resolve (node:internal/modules/esm/loader:372:25)","    at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:249:38)","    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:76:39)","    at link (node:internal/modules/esm/module_job:75:36)"]}
INIT_REPORT Init Duration: 196.17 ms    Phase: init Status: error   Error Type: Runtime.ExitError
2024-04-06T07:39:53.096Z    undefined   ERROR   Uncaught Exception  {"errorType":"Error","errorMessage":"Cannot find package '@elastic/elasticsearch' imported from /var/task/index.mjs","code":"ERR_MODULE_NOT_FOUND","stack":["Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@elastic/elasticsearch' imported from /var/task/index.mjs","    at new NodeError (node:internal/errors:405:5)","    at packageResolve (node:internal/modules/esm/resolve:965:9)","    at moduleResolve (node:internal/modules/esm/resolve:1022:20)","    at moduleResolveWithNodePath (node:internal/modules/esm/resolve:876:12)","    at defaultResolve (node:internal/modules/esm/resolve:1242:79)","    at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:403:12)","    at ModuleLoader.resolve (node:internal/modules/esm/loader:372:25)","    at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:249:38)","    at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:76:39)","    at link (node:internal/modules/esm/module_job:75:36)"]}

问题原因

你创建Layer时的目录结构不符合Lambda Node.js运行时的依赖加载规则。仅复制@elastic目录到my-layer/nodejs/node_modules下,会导致包的元数据(如package.json)无法被Node.js的ESM模块解析器正确识别,进而触发找不到包的错误。

正确的Layer创建步骤

  1. 创建符合规范的Layer目录并安装依赖:
    # 创建Layer基础目录
    mkdir -p my-layer/nodejs
    # 进入nodejs目录初始化npm
    cd my-layer/nodejs
    npm init -y
    # 安装@elastic/elasticsearch包
    npm install @elastic/elasticsearch
    # 返回上级目录
    cd ../..
    
  2. 打包Layer:
    zip -r my-layer.zip my-layer/
    
  3. 将打包后的my-layer.zip上传为AWS Lambda Layer,并在目标Lambda函数的配置中关联该Layer。

额外检查要点

  • 确保本地安装依赖时使用的Node.js版本与Lambda函数配置的运行时版本一致,避免因版本差异导致的兼容性问题。
  • 验证Lambda函数的Layers配置,确认目标Layer已成功关联且版本正确。
  • 如果你使用ESM模块(.mjs文件),确保导入语句格式正确:
    import { Client } from '@elastic/elasticsearch';
    

内容的提问来源于stack exchange,提问作者Shamitha Reddy Regenti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 14:00:29