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

使用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路径,或构建流程存在配置冲突:

  1. ECR配置指定的path目录下不存在Dockerfile
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:15:29