使用Serverless Framework+AWS ECR部署Lambda遇路径参数错误求助
解决AWS Lambda Docker部署时的TypeError [ERR_INVALID_ARG_TYPE]错误
问题背景
基于aws-nodejs-typescript模板开发Lambda函数,为绕过Lambda 50MB上传限制,采用Docker构建addFriend函数,部署时控制台抛出错误:
TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received undefined
现有配置
Dockerfile(当前位于项目根目录):
FROM public.ecr.aws/lambda/nodejs:14 as builder WORKDIR /usr/app COPY package.json handler.ts ./ RUN npm install RUN npm run build FROM public.ecr.aws/lambda/nodejs:14 WORKDIR ${LAMBDA_TASK_ROOT} COPY --from=builder /usr/app/dist/* ./ CMD ["handler.main"]
serverless.ts相关配置片段:
const serverlessConfiguration: AWS = { ... custom: { esbuild: { bundle: true, minify: false, sourcemap: true, exclude: ['aws-sdk'], target: 'node14', define: { 'require.resolve': undefined }, platform: 'node', }, ... }, plugins: ['serverless-esbuild'], provider: { name: 'aws', runtime: 'nodejs14.x', profile: <PROFILE>, region: 'us-east-1', stage: 'dev', apiGateway: { minimumCompressionSize: 1024, shouldStartNameWithService: true, }, iamRoleStatements: [ { Effect: 'Allow', Action: ['s3:*', 'sns:*'], Resource: '*', }, ], ecr: { images: { addfriendfunction: { path: './src/functions/addFriend', }, }, }, lambdaHashingVersion: '20201221', }, functions: { ... addPushToken, addFriend: { image: { name: 'addfriendfunction', }, events: [ { http: { method: 'get', path: 'api/v1/add-friend', }, }, ], },
错误原因分析
该错误核心是Serverless Framework在处理ECR镜像构建时,无法找到有效的Dockerfile路径,或构建流程存在配置冲突:
- ECR配置指定的
path目录下不存在Dockerfile - serverless-esbuild插件与Docker构建流程冲突,插件尝试处理Docker构建的函数导致路径参数异常
可行解决方案
1. 修正Dockerfile路径匹配ECR配置
将项目根目录的Dockerfile移动到./src/functions/addFriend目录下,确保Serverless Framework能在指定路径找到Dockerfile。若需保留根目录的Dockerfile,可修改ECR配置的path为项目根目录:
ecr: { images: { addfriendfunction: { path: './', // 改为Dockerfile所在的根目录 }, }, },
2. 为Docker构建的函数禁用esbuild插件
由于addFriend函数采用Docker独立构建,无需serverless-esbuild处理,在函数配置中禁用插件:
addFriend: { image: { name: 'addfriendfunction', }, package: { disableEsbuild: true, // 禁用esbuild避免冲突 }, events: [ { http: { method: 'get', path: 'api/v1/add-friend', }, }, ], },
3. 验证Dockerfile构建输出
确保npm run build命令能正确将handler.ts编译到dist目录,检查package.json中的build脚本是否正确:
"scripts": { "build": "tsc --outDir dist" }
同时确认Dockerfile中COPY的路径正确,确保构建后的产物能被复制到Lambda任务目录。
4. 检查配置拼写与一致性
确认ECR镜像名称addfriendfunction与functions中image.name完全一致,避免大小写或拼写错误导致的路径解析异常。
内容的提问来源于stack exchange,提问作者Iliaaaa
相关产品推荐
相关产品推荐

