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

AWS Step Functions状态机执行成功但无法跳转下一步超时问题排查

AWS Step Functions状态机无法向下跳转故障解决方案

核心故障特征

  • 用于PDF生成的状态机此前运行正常,7月23日突发故障
  • 第一步任务可正常触发,内部执行日志显示完成,但无法向下一步传递数据,最终触发超时
  • 已尝试调整超时时间、调高状态转换限流配额均无效

根因定位

结合Lambda代码与状态机配置,故障大概率由以下几个可复现的原因导致:

  1. Lambda回调配置缺失:代码注释标注需要冻结数据库连接,但未配置context.callbackWaitsForEmptyEventLoop = false参数,数据库连接池的长连接、S3客户端的残留连接会占用事件循环,导致调用callback()后Lambda不会立即向Step Functions返回结果,最终触发超时。该问题在7月AWS对Node.js运行时版本更新后集中出现,此前旧版本运行时对事件循环空闲判定阈值更宽松,所以未暴露。
  2. 状态传递Payload超限:Step Functions单步状态传递的Payload最大限制为256KB,若返回内容中包含完整HTML文本、签名Payload等大字段,超过阈值后会被Step Functions拒绝接收,表现为回调超时。
  3. Lambda网络配置变更:若7月23日前后将该Lambda调整至VPC内部部署,未配置公网出口或Step Functions VPC端点的情况下,Lambda无法将执行结果返回至Step Functions公共服务端点,导致超时。

修复步骤

1. 补全Lambda回调配置

在Lambda函数入口处添加如下配置,强制调用callback后立即返回结果:

exports.lambdaHandler =  (event, context, callback) => {
    // 新增以下行,匹配注释中冻结数据库连接的需求
    context.callbackWaitsForEmptyEventLoop = false;
    console.log(event);
    // 剩余原有代码不变
}

2. 裁剪返回Payload

删除返回对象中不需要传递到下一步的冗余大字段,仅保留必要字段:

// 原返回逻辑中移除sqsPayload等非必要大字段,避免超限
callback(null, {
    'isAllowed': true,
    'sqsQueData': data.sqsQueData,
    'uploadedHtmlUri': process.env.APP_CDN + uploadData.Key,
});

同时在回调前增加日志确认Payload大小:

const output = {
    'isAllowed': true,
    'sqsQueData': data.sqsQueData,
    'uploadedHtmlUri': process.env.APP_CDN + uploadData.Key,
};
console.log('Output payload size:', Buffer.byteLength(JSON.stringify(output)));
callback(null, output);

3. 核查Lambda网络配置

  • 若Lambda部署在VPC内,确认子网路由表配置了NAT网关,或已创建Step Functions的Interface类型VPC端点
  • 确认Lambda执行角色保留基础权限,无需额外Step Functions权限即可完成同步任务返回

4. 验证运行时兼容性

确认Lambda使用的Node.js运行时版本,若此前为14.x版本,升级至18.x或20.x LTS版本后,重新测试database-layer依赖的兼容性,确保数据库查询回调可正常触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 11:57:03