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

如何打包带外部模块的TypeScript Lambda并传入CDK fromAsset方法

无Docker环境下打包带第三方依赖的TypeScript Lambda(AWS CDK适配)

可直接落地的无Docker方案共两种,均能满足打包带非AWS官方外部模块的TS Lambda需求:

方案1:使用CDK官方NodejsFunction构造(推荐)

CDK自带的aws-cdk-lib/aws-lambda-nodejs模块原生支持本地esbuild打包,只要本地安装了esbuild,就会自动跳过Docker镜像拉取流程,在本地完成TS转译、依赖打包全流程,不需要手动维护构建脚本。

  1. 先在CDK项目里安装本地esbuild依赖:
    npm install -D esbuild
    
  2. 替换原有的lambda.Function写法,直接指向TS源文件即可:
    import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs';
    import { Runtime } from 'aws-cdk-lib/aws-lambda';
    
    new NodejsFunction(scope, "Function", {
      runtime: Runtime.NODEJS_16_X,
      entry: "path/to/your/lambda/source/index.ts", // 直接填写TS入口文件路径
      handler: "handler",
      environment: {
        // 原有环境变量配置保持不变
      },
      bundling: {
        forcedDockerBundling: false, // 强制禁用Docker打包
        // 如果有不需要打进行的原生模块,列在这里,会自动从本地node_modules复制到产物
        nodeModules: [],
        minify: true, // 可选,开启压缩减小Lambda包体积
        sourceMap: false // 按需开启,方便线上调试
      }
    });
    

该构造生成的Lambda包直接符合Node.js 16运行时要求,不需要额外处理路径映射问题。

方案2:手动本地构建后使用fromAsset引入

如果你希望保留原有lambda.Code.fromAsset的写法,完全自主控制构建流程,直接用esbuild写本地打包脚本即可:

  • 安装开发依赖:
    npm install -D esbuild typescript @types/aws-lambda
    
  • 在package.json中添加Lambda打包脚本:
    {
      "scripts": {
        "bundle:lambda": "esbuild path/to/your/lambda/source/index.ts --bundle --platform=node --target=node16 --outfile=lambda-dist/index.js --external:aws-sdk"
      }
    }
    
    核心参数说明:
    • --bundle:自动递归打包所有引入的本地代码、第三方npm依赖到单个JS文件
    • --external:aws-sdk:排除Lambda运行时自带的AWS SDK,减小包体积
    • 如果遇到无法被esbuild打包的原生C++模块,追加对应--external:模块名参数,同时把node_modules下对应模块的文件夹复制到lambda-dist目录即可
  • 执行npm run bundle:lambda,生成的lambda-dist文件夹就是完整的Lambda部署包,直接把路径传入原有代码的lambda.Code.fromAsset('lambda-dist')位置即可正常使用。

注意:如果使用带原生绑定的第三方模块(比如sharp、sqlite3等),请确保本地安装依赖的架构和Lambda配置的架构一致:如果Lambda用x86_64架构,M系列芯片的Mac本地安装依赖时需要加--target_arch=x64 --target_platform=linux参数,或者直接把Lambda架构调整为arm64和本地环境匹配,避免运行时出现模块加载错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:36:38