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

如何在AWS Lambda Node.js 20.x中使用本地自定义模块?

解决AWS Lambda Node.js 20.x无法找到本地自定义模块的问题

问题原因

Lambda部署后,/var/task对应你打包的my_lambda_func目录内容。你原本将local_util放在lambda根目录下,与my_lambda_func同级,打包时未将其包含进压缩包;同时../local_util的相对路径在Lambda环境中指向/var/local_util,这个路径根本不存在,因此触发ERR_MODULE_NOT_FOUND错误。此外,你使用--install-links创建的是软链接,zip打包默认不会跟随软链接复制实际文件,导致Lambda环境中node_modules里的模块引用无效。

可行解决方案

方法1:将自定义模块移至Lambda函数目录内

  • 调整目录结构,把local_util移入my_lambda_func:
    lambda/
    |__my_lambda_func/
       |__index.js
       |__package.json
       |__local_util/
          |__index.js
          |__package.json
    
  • 修改my_lambda_func/index.js的导入语句:
    import { lock } from './local_util/index.js';
    
  • 回到my_lambda_func目录,重新打包部署:
    zip -qr function.zip .
    

方法2:打包时包含上级目录的自定义模块(适合不想移动目录的场景)

  • 回到lambda根目录,执行打包命令同时包含两个目录:
    zip -qr function.zip my_lambda_func/ local_util/
    
  • 保持my_lambda_func/index.js的导入语句不变:
    import { lock } from '../local_util/index.js';
    
    此时Lambda环境中/var/task对应lambda根目录,../local_util会指向/var/task/local_util,可正确找到模块。

方法3:通过npm本地安装并确保模块被打包

  • 编辑local_util/package.json,设置name字段(比如@my/local-util);
  • 在my_lambda_func目录下执行安装命令(无需--install-links,默认会复制模块文件到node_modules):
    npm install ../local_util
    
  • 修改导入语句为模块名称:
    import { lock } from '@my/local-util';
    
  • 重新打包my_lambda_func目录并部署。

内容的提问来源于stack exchange,提问作者Matt Miller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:52:41