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

AWS Step Function错误处理求助:遇错后继续执行并传递Lambda输入

我之前刚好折腾过类似的需求,其实用Step Functions的错误捕获(Catch)加上ResultSelector配置就能完美解决,给你一步步说清楚:

核心思路

当Lambda状态出错时,通过Catch块捕获错误,然后强制将该状态的原始输入作为输出传递给下一个状态,这样就能保证流程继续执行,同时下一个状态拿到的内容和正常执行时一致(毕竟你说大多数Lambda输出和输入一致)。

具体配置示例

假设你有一个处理数据的Lambda状态ProcessData,出错后要跳转到FinalizeProcessing,配置如下:

{
  "Comment": "出错时保留原始输入继续执行的状态机",
  "StartAt": "ProcessData",
  "States": {
    "ProcessData": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-1:123456789012:function:ProcessDataFunction",
      "Next": "FinalizeProcessing",
      "Catch": [
        {
          "ErrorEquals": ["States.ALL"], // 捕获所有类型的错误
          "ResultSelector": {
            "$": "$" // 强制输出为当前状态的原始输入
          },
          "Next": "FinalizeProcessing" // 出错后和成功走同一个下一个状态
        }
      ]
    },
    "FinalizeProcessing": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-1:123456789012:function:FinalizeFunction",
      "End": true
    }
  }
}

关键参数解释

  • ErrorEquals: 指定要捕获的错误类型,用States.ALL可以覆盖所有可能的错误(包括Lambda运行时异常、权限错误等),也可以指定具体的错误类型比如Lambda.ServiceException来精准捕获。
  • ResultSelector: 这里的"$": "$"是核心——它告诉Step Functions,不管错误结果是什么,都把当前状态的原始输入($代表整个输入对象)作为输出传递给下一个状态。
  • Next: 让出错后的跳转目标和成功时一致,确保流程不会中断。

可选扩展:保留错误信息

如果你需要同时保留原始输入和错误详情(方便后续排查),可以调整ResultSelector把错误信息附加到输入里:

"ResultSelector": {
  "originalInput": "$",
  "errorDetails": "$.error"
}

这样下一个状态就能拿到包含原始数据和错误信息的对象了。

测试建议

你可以故意让ProcessDataFunction抛出一个异常(比如返回new Error("测试错误")),然后查看FinalizeProcessing的输入,确认是否是ProcessData状态的原始输入,以此验证配置是否生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:27:26