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

AWS Step Functions全局超时触发自定义Lambda动作的实现方法

问题解答

可以通过两种方式实现你的需求:使用状态机级全局超时结合EventBridge触发动作,或者重构状态机将超时逻辑内置于状态流中。

为什么当前示例无法实现

你当前定义的状态机级TimeoutSeconds: 10会在10秒后触发全局超时,抛出States.Timeout错误,但这个错误不会被单个Task的Catch捕获——因为全局超时是针对整个状态机执行的,而非单个任务内部的错误。所以你的"Wait 60 secs"任务的Catch无法响应全局超时事件。

方案一:使用EventBridge监听全局超时事件

这种方式保留状态机级的TimeoutSeconds,通过外部事件触发自定义动作:

  • 创建EventBridge规则,匹配状态机执行失败的事件:事件模式需匹配detail.stateMachineArn为你的状态机ARN,detail.status为FAILED,detail.error为States.Timeout。
  • 给规则设置目标(比如Lambda函数、SNS主题),用来执行"Notify failure"的逻辑(推送消息到SNS)。

方案二:重构状态机内置超时处理

将主逻辑封装到一个Parallel状态中,利用该状态的TimeoutSeconds实现全局超时,并通过Catch直接跳转到"Notify failure":

{
  "Comment": "带全局超时处理的状态机示例",
  "StartAt": "主逻辑容器",
  "States": {
    "主逻辑容器": {
      "Type": "Parallel",
      "TimeoutSeconds": 10,
      "Branches": [
        {
          "StartAt": "Wait 60 secs",
          "States": {
            "Wait 60 secs": {
              "Type": "Task",
              "Resource": "arn:aws:states:::lambda:invoke",
              "Parameters": {
                "FunctionName": "你的等待函数ARN"
              },
              "End": true,
              "Catch": [
                {
                  "ErrorEquals": ["States.All"],
                  "Next": "Notify failure"
                }
              ]
            }
          }
        }
      ],
      "Catch": [
        {
          "ErrorEquals": ["States.Timeout"],
          "Next": "Notify failure"
        }
      ],
      "Next": "Notify failure"
    },
    "Notify failure": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sns:publish",
      "Parameters": {
        "TopicArn": "你的SNS主题ARN",
        "Message": "状态机执行超时!"
      },
      "End": true
    }
  }
}

说明:

  • Parallel状态的TimeoutSeconds替代了原状态机级的超时,控制整个主逻辑的执行时间。
  • Parallel状态的Catch捕获States.Timeout错误,直接跳转到"Notify failure"执行自定义动作。
  • 主分支内的Catch依然处理单个任务的错误,互不影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:15:32