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

AWS Step Functions工作流优化:复用TempTableDrop并处理任务错误

AWS Step Functions 工作流实现方案

可以实现你的需求,核心是利用Step Functions的错误捕获(Catch)机制和状态跳转逻辑,确保无论Stage-2、Stage-3执行成功还是失败,都能统一执行临时表清理,再根据执行结果跳转至最终状态。以下是两种场景的示例定义:

场景1:串行执行Stage-2和Stage-3

{
  "Comment": "工作流:创建临时表 → 串行执行Stage2/Stage3 → 清理临时表 → 判断最终状态",
  "StartAt": "CreateTempTable",
  "States": {
    "CreateTempTable": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:CreateTempTableFunction",
      "Next": "Stage-2"
    },
    "Stage-2": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:Stage2Function",
      "Next": "Stage-3",
      "Catch": [
        {
          "ErrorEquals": ["States.ALL"],
          "ResultPath": "$.error",
          "Next": "TempTableDrop"
        }
      ]
    },
    "Stage-3": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:Stage3Function",
      "Next": "TempTableDrop",
      "Catch": [
        {
          "ErrorEquals": ["States.ALL"],
          "ResultPath": "$.error",
          "Next": "TempTableDrop"
        }
      ]
    },
    "TempTableDrop": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:TempTableDropFunction",
      "Next": "CheckJobStatus"
    },
    "CheckJobStatus": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.error",
          "IsPresent": true,
          "Next": "JobFailed"
        }
      ],
      "Default": "JobSucceeded"
    },
    "JobSucceeded": {
      "Type": "Succeed"
    },
    "JobFailed": {
      "Type": "Fail",
      "Error": "StageExecutionFailed",
      "Cause": "$.error.Cause"
    }
  }
}

关键逻辑说明

  • 错误捕获:Stage-2和Stage-3均配置Catch规则捕获所有类型错误(States.ALL),将错误信息存入$.error字段后直接跳转至TempTableDrop
  • 统一清理:两个阶段执行成功时,通过Next直接跳转至TempTableDrop,确保无论执行结果如何,临时表清理逻辑只定义一次且必被执行
  • 结果判断:CheckJobStatus通过检查$.error是否存在,决定最终跳转至成功或失败状态

场景2:并行执行Stage-2和Stage-3

如果需要同时执行Stage-2和Stage-3,可使用Parallel状态简化逻辑:

{
  "Comment": "工作流:创建临时表 → 并行执行Stage2/Stage3 → 清理临时表 → 判断最终状态",
  "StartAt": "CreateTempTable",
  "States": {
    "CreateTempTable": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:CreateTempTableFunction",
      "Next": "ExecuteStages"
    },
    "ExecuteStages": {
      "Type": "Parallel",
      "Branches": [
        {
          "StartAt": "Stage-2",
          "States": {
            "Stage-2": {
              "Type": "Task",
              "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:Stage2Function",
              "End": true
            }
          }
        },
        {
          "StartAt": "Stage-3",
          "States": {
            "Stage-3": {
              "Type": "Task",
              "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:Stage3Function",
              "End": true
            }
          }
        }
      ],
      "Next": "TempTableDrop",
      "Catch": [
        {
          "ErrorEquals": ["States.ALL"],
          "ResultPath": "$.error",
          "Next": "TempTableDrop"
        }
      ]
    },
    "TempTableDrop": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:REGION:ACCOUNT_ID:function:TempTableDropFunction",
      "Next": "CheckJobStatus"
    },
    "CheckJobStatus": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.error",
          "IsPresent": true,
          "Next": "JobFailed"
        }
      ],
      "Default": "JobSucceeded"
    },
    "JobSucceeded": {
      "Type": "Succeed"
    },
    "JobFailed": {
      "Type": "Fail",
      "Error": "StageExecutionFailed",
      "Cause": "$.error.Cause"
    }
  }
}

关键逻辑说明

  • Parallel状态会同时执行两个分支任务,任意分支出错都会触发Catch规则跳转至TempTableDrop
  • 所有分支执行成功时,自动跳转至TempTableDrop,后续的结果判断逻辑与串行场景一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:25:00