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

NodeJS AWS多Lambda共享通用函数的更优实现方案咨询

解决AWS Lambda复用Node.js通用函数的简洁方案

方案1:用AWS Lambda Layer共享代码与依赖

这是AWS官方推荐的代码复用方案,能彻底解决重复安装依赖的问题:

  • 操作步骤:
    1. 单独创建通用代码目录,比如layers/common,结构如下:
      layers/common/nodejs/
        ├── package.json
        ├── node_modules/
        └── utils/
            └── common-functions.js
      
    2. 进入nodejs目录执行npm install,只安装一次通用依赖
    3. 把nodejs目录打包成zip,通过AWS CLI或控制台创建Lambda层
    4. 在需要复用代码的Lambda函数中关联该层,代码里直接引入:
      const { myCommonFunc } = require('/opt/utils/common-functions');
      
    5. Github Actions自动化发布层的示例脚本:
      cd layers/common/nodejs
      npm ci
      cd ../..
      zip -r common-layer.zip nodejs/
      aws lambda publish-layer-version --layer-name common-utils --zip-file fileb://common-layer.zip --compatible-runtimes nodejs18.x
      

方案2:Monorepo统一管理多Lambda项目

如果项目本身是多Lambda结构,用单仓库多包模式更便于维护:

  • 操作步骤:
    1. 根目录package.json启用npm workspaces:
      {
        "private": true,
        "workspaces": [
          "packages/common",
          "packages/lambda-order",
          "packages/lambda-user"
        ]
      }
      
    2. packages/common存放通用函数与依赖,各Lambda目录的package.json将common作为本地依赖:
      {
        "dependencies": {
          "@my-project/common": "workspace:*"
        }
      }
      
    3. 根目录执行npm install,所有依赖统一安装到根目录node_modules,打包Lambda时可通过esbuild/webpack将通用代码合并进业务包,或结合Lambda层复用依赖
    4. Github Actions只需在根目录执行一次npm ci,再分别打包各Lambda即可

方案3:用构建工具打包Lambda代码

如果不想用层或Monorepo,用构建工具直接把通用代码打包进Lambda部署包:

  • 操作步骤:
    1. 每个Lambda目录配置esbuild脚本(示例package.json):
      {
        "scripts": {
          "build": "esbuild index.js --bundle --platform=node --outfile=dist/index.js"
        }
      }
      
    2. 通用代码作为本地模块引入,构建时esbuild会自动将其打包进输出文件,无需手动复制
    3. 可通过external配置排除公共依赖,把这些依赖放到Lambda层进一步压缩包体积

额外优化

  • 在Github Actions中缓存node_modules,大幅减少依赖安装时间:
    - name: Cache node modules
      uses: actions/cache@v3
      with:
        path: '**/node_modules'
        key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
        restore-keys: |
          ${{ runner.os }}-node-
    
  • 创建Lambda层时,务必指定与Lambda函数一致的Node.js runtime版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:52:25