基于node-alpine构建AWS Lambda Node.js镜像时报MODULE_NOT_FOUND错误
问题原因
你遇到的报错由两个核心配置错误导致:
- 未显式配置Lambda运行时入口:AWS官方基础镜像默认内置了
aws-lambda-ric的ENTRYPOINT配置,但你使用的纯净node:14-alpine镜像没有该配置,导致CMD ["main.handler"]被系统当成可执行文件直接执行,而不是作为handler参数传给Lambda运行时客户端。 - 编译产物复制规则错误:你当前的COPY命令会将
src目录本身复制到工作目录,导致编译后的main.js路径为/function/src/main.js,与main.handler预期的/function/main.js路径不匹配。
修复步骤
1. 修正COPY规则
将生产阶段的编译产物COPY语句修改为直接复制dist/src目录下的文件到工作目录:
# 原错误写法 # COPY --from=builder ${FUNCTION_DIR}/dist/src* ${FUNCTION_DIR} # 修正后写法 COPY --from=builder ${FUNCTION_DIR}/dist/src/ ${FUNCTION_DIR}/
如果你的tsconfig配置中编译产物直接输出在dist根目录,去掉路径中的src即可。
2. 添加ENTRYPOINT配置
在生产阶段的CMD语句前显式指定Lambda运行时入口:
ENTRYPOINT ["npx", "aws-lambda-ric"]
3. 可选验证
构建完成后可运行以下命令确认文件路径符合预期:
docker run --rm --entrypoint ls lambda-test:latest -la /function
确认输出中存在main.js文件即可。
修改后生产阶段完整参考配置
#***************************************************************************** # Production Stage #****************************************************************************/ FROM node:14-alpine # Include global arg in this stage of the build ARG FUNCTION_DIR WORKDIR ${FUNCTION_DIR} RUN mkdir -p /opt/extensions COPY --from=builder ${FUNCTION_DIR}/node_modules ${FUNCTION_DIR}/node_modules COPY --from=builder ${FUNCTION_DIR}/package*.json ${FUNCTION_DIR} COPY --from=builder ${FUNCTION_DIR}/dist/src/ ${FUNCTION_DIR}/ ENTRYPOINT ["npx", "aws-lambda-ric"] CMD [ "main.handler" ]
内容的提问来源于stack exchange,提问作者yuksi
相关产品推荐
相关产品推荐

