基于Docker镜像的AWS Lambda函数出现模块找不到错误求助
问题分析与解决方案
核心问题定位
错误提示Cannot find module 'liveiq'并非来自handler.js中的require('./src/liveiq.js'),而是**src/liveiq.js内部存在错误的模块引用**,或者对应依赖包未正确安装。
具体排查与修复步骤
1. 检查src/liveiq.js内部的引用写法
打开src/liveiq.js,查找是否存在类似:
require('liveiq')
的代码:
- 如果是引用同目录下的本地模块,必须使用相对路径,比如:
// 引用同目录下的xxx.js require('./xxx.js') // 引用上级目录的模块 require('../xxx.js') - 如果
liveiq是第三方npm包,确认package.json的dependencies中已添加该包,且依赖安装步骤无遗漏。
2. 修正Dockerfile的依赖安装逻辑
当前Dockerfile的依赖安装步骤存在冗余,建议修改为:
FROM public.ecr.aws/lambda/nodejs:18 # Install system dependencies RUN yum install -y \ fontconfig \ freetype \ git \ bzip2 \ && yum clean all \ && rm -rf /var/cache/yum # Copy package files to Lambda's working directory (/var/task) COPY package*.json ./ # Install all production dependencies RUN npm install --production # Copy application code COPY ./src ./src COPY ./handler.js ./handler.js # Set Lambda handler CMD ["handler.handler"]
- 使用
npm install --production确保只安装生产依赖,避免不必要的包 - 基础镜像
public.ecr.aws/lambda/nodejs:18的默认工作目录就是/var/task,无需额外指定
3. 验证镜像内的文件结构
拉取ECR镜像后,本地运行容器检查文件是否正确放置:
docker run -it --entrypoint /bin/bash <your-ecr-image-uri> # 进入容器后执行 ls -la /var/task/ # 确认存在src/liveiq.js,以及node_modules(如果有第三方依赖)
4. 额外排查点
- 确认
src/liveiq.js的文件名拼写完全正确(Linux环境下区分大小写) - 检查Lambda函数配置:是否正确指定
handler.handler作为入口,未随意修改工作目录
内容的提问来源于stack exchange,提问作者Guillaume Des Rosiers
相关产品推荐
相关产品推荐

