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

AWS Lambda+TypeScript出现502错误及TypeError问题排查求助

问题分析与解决方案

问题概述

通过API Gateway调用Lambda时返回502 Bad Gateway,Lambda日志抛出如下错误:

{
    "errorType": "TypeError",
    "errorMessage": "Object.defineProperty called on non-object",
    "stack": [
        "TypeError: Object.defineProperty called on non-object",
        "    at defineProperty (<anonymous>)",
        "    at __name (/var/task/index.js:24690:37)",
        "    at <static_initializer> (/var/task/index.js:24816:9)",
        "    at node_modules/@aws-sdk/lib-dynamodb/dist-cjs/index.js (/var/task/index.js:24814:82)",
        "    at __require (/var/task/index.js:10:50)",
        "    at Object.<anonymous> (/var/task/index.js:44040:35)",
        "    at Module._compile (node:internal/modules/cjs/loader:1364:14)",
        "    at Module._extensions..js (node:internal/modules/cjs/loader:1422:10)",
        "    at Module.load (node:internal/modules/cjs/loader:1203:32)",
        "    at Module._load (node:internal/modules/cjs/loader:1019:12)"
    ]
}

项目无代码变更,但数日前运行正常,Lambda使用Node.js 18环境。

可能原因

  1. AWS SDK v3版本混杂:项目中@aws-sdk系列包版本差异过大(如@aws-sdk/client-dynamodb为3.637.0,@aws-sdk/client-lambda为3.698.0,@aws-sdk/client-scheduler低至3.350.0)。AWS SDK v3的子包需保持版本一致,否则内部API不兼容,会导致初始化阶段调用Object.defineProperty时传入非对象值触发错误。
  2. CDK版本冲突:同时使用CDK v1的@aws-cdk/aws-iam(1.202.0)和CDK v2的aws-cdk-lib(2.76.0),两类版本的依赖会产生冲突,间接影响Lambda运行时的依赖加载。
  3. Lambda运行时小版本更新:AWS可能对Node.js 18运行时推送了补丁更新,旧版本SDK与新运行时环境不兼容,导致初始化报错。
  4. 依赖包缓存损坏:部署时的node_modules缓存或package-lock.json文件损坏,导致SDK包文件缺失或结构异常。

解决方案

  1. 统一AWS SDK v3版本
    修改package.json中所有@aws-sdk开头的依赖,将版本统一为同一稳定版(建议使用最新兼容版,如3.699.0),示例:

    "@aws-sdk/client-dynamodb": "^3.699.0",
    "@aws-sdk/client-lambda": "^3.699.0",
    "@aws-sdk/client-s3": "^3.699.0",
    "@aws-sdk/client-scheduler": "^3.699.0",
    "@aws-sdk/client-secrets-manager": "^3.699.0",
    "@aws-sdk/client-sqs": "^3.699.0",
    "@aws-sdk/lib-dynamodb": "^3.699.0",
    "@aws-sdk/protocol-http": "^3.699.0",
    "@aws-sdk/s3-request-presigner": "^3.699.0",
    "@aws-sdk/util-create-request": "^3.699.0"
    

    执行rm -rf node_modules package-lock.json清理缓存,再npm install重新安装依赖后重新部署。

  2. 移除CDK v1依赖
    替换CDK v1的@aws-cdk/aws-iam和@aws-cdk/aws-lambda-event-sources为CDK v2对应模块:

    • @aws-cdk/aws-iam → aws-cdk-lib.aws_iam
    • @aws-cdk/aws-lambda-event-sources → aws-cdk-lib.aws_lambda_event_sources
      删除package.json中的CDK v1依赖,重新安装部署。
  3. 验证并适配Lambda运行时
    查看Lambda控制台中Node.js 18的具体小版本,若近期有更新,可尝试:

    • 将SDK升级至适配该运行时的最新版本
    • 若AWS支持回退,暂时回退到之前的运行时小版本测试
  4. 清理部署缓存
    部署Lambda时,确保使用全新的部署包,避免依赖缓存问题。若使用CDK部署,可执行cdk clean清理部署缓存后重新部署。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:55:57