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

通过CloudFormation部署后Lambda函数无法正常工作的问题求助

问题描述

我正在构建一个基于API Gateway和Lambda(Node.js后端)的应用,后端用Express+Sequelize搭建,还没连接数据库。本地运行时访问端点能正常收到hello world响应,但通过CloudFormation部署堆栈后,代码已经传到S3,API和Lambda也显示更新完成,访问端点却报错:

502 Bad Gateway - "message": "Internal server error"

后端只有简单的文本响应,没有复杂逻辑,不知道该怎么排查:不确定是API Gateway的问题还是Lambda部署的问题,毕竟本地能正常运行;另外CloudFormation创建的API Gateway同时存在dev和Stage两个阶段,不清楚原因和是否会造成影响。附对应的CloudFormation YAML配置:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Storygraf backend API
Globals:
  Function:
    Timeout: 3
Resources:
  ExpressApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: dev
  ExpressLambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: s3://storygraf-backend/xxxx
      Handler: lambda.handler
      MemorySize: 512
      Runtime: nodejs14.x
      Timeout: 30
      Events:
        ProxyApiRoot:
          Type: Api
          Properties:
            RestApiId:
              Ref: ExpressApi
            Path: /
            Method: ANY
        ProxyApiGreedy:
          Type: Api
          Properties:
            RestApiId:
              Ref: ExpressApi
            Path: /{proxy+}
            Method: ANY
排查与解决方案

一、优先排查Lambda执行问题

  • 查看CloudWatch日志:直接去CloudWatch Logs找到对应Lambda的日志组,检查是否有报错信息——比如依赖缺失(本地装了node_modules但部署时没打包进去)、handler路径错误、Node.js版本兼容问题等,这些是本地能跑但部署失败的常见原因。
  • 直接测试Lambda:在Lambda控制台的「测试」标签页,选择API Gateway代理事件模板,模拟请求调用Lambda,看是否能正常返回响应。如果Lambda本身执行报错,问题就出在Lambda这边。
  • 核对handler配置:确认YAML里的Handler: lambda.handler和代码里的导出逻辑一致——比如用serverless-express适配Express到Lambda的话,是否在lambda.js里正确导出了exports.handler = serverlessExpress.proxy(serverlessExpress.createServer(app));。
  • 统一超时设置:全局Function超时是3秒,但Lambda单独设了30秒,可能存在配置冲突,先把全局超时改成和Lambda一致试试。

二、排查API Gateway问题

  • 确认访问的阶段URL:你配置里指定了StageName: dev,访问时要确保用的是dev阶段的API URL,Stage阶段大概率是之前操作残留的,不要访问错了。
  • 开启API Gateway日志:在API Gateway控制台的阶段设置里,开启CloudWatch日志,查看请求转发到Lambda的过程中是否有权限错误(比如API Gateway没有调用Lambda的权限)、映射模板错误等。
  • 检查集成配置:确认API Gateway的代理集成是默认配置,不要自定义错误的请求/响应映射模板,避免因格式不兼容导致502错误。

三、关于两个API阶段的说明

  • dev是你在YAML里指定的阶段,CloudFormation会自动创建这个阶段并完成API部署。
  • Stage阶段是历史操作残留的,不会影响正常使用,但建议清理掉避免混淆。你的Lambda事件是绑定到dev阶段的,所以必须访问dev阶段的URL才能触发Lambda。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:33:21