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

AWS Step Function中Lambda能否获取执行名?异常记录如何实现?

解答你的AWS Step Functions相关问题

针对你的两个问题,我来逐一说明:

1. AWS Step Function触发的Lambda能否获取启动它的execution name?

当然可以!当Step Functions调用Lambda时,会自动将执行上下文信息作为事件参数传递给Lambda函数。你只需要在Lambda代码中读取事件对象里的ExecutionName字段即可。

举个Python Lambda的示例:

def lambda_handler(event, context):
    # 从事件中提取Step Functions的执行名称
    execution_name = event["ExecutionName"]
    print(f"触发当前Lambda的Step Functions执行名称是: {execution_name}")
    
    # 这里写你的业务逻辑代码
    return {"status": "success", "execution_name": execution_name}

除了ExecutionName,事件中还包含ExecutionArn、StateMachineArn、StateName等实用的上下文字段,都可以直接读取使用。

2. 新增错误处理步骤记录失败到DynamoDB,获取execution name是否可行?

完全可行,而且实现起来很简单!你不需要额外“从某处获取”execution name——Step Functions提供了内置上下文变量$$.Execution.Name,在状态机的任何步骤(包括错误处理步骤)中都可以直接引用它。

实现示例:直接用DynamoDB集成记录失败

如果你的状态机直接集成DynamoDB的PutItem操作,不需要通过Lambda中转,可以这样配置错误处理步骤:

{
  "States": {
    "容易失败的任务": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-1:123456789012:function:你的风险函数",
      "Catch": [
        {
          "ErrorEquals": ["States.ALL"],
          "Next": "记录失败到DynamoDB"
        }
      ]
    },
    "记录失败到DynamoDB": {
      "Type": "Task",
      "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/FailureLogs",
      "Parameters": {
        "TableName": "FailureLogs",
        "Item": {
          "ExecutionName": {"S": "$$.Execution.Name"},
          "错误信息": {"S": "$.Error"},
          "错误原因": {"S": "$.Cause"},
          "触发时间": {"S": "$$.Execution.StartTime"}
        }
      },
      "End": true
    }
  }
}

实现示例:通过Lambda记录失败

如果需要用Lambda处理失败逻辑,也可以在错误处理步骤的参数中传递$$.Execution.Name给Lambda:

{
  "记录失败到DynamoDB": {
    "Type": "Task",
    "Resource": "arn:aws:lambda:us-east-1:123456789012:function:你的错误处理Lambda",
    "Parameters": {
      "execution_name": "$$.Execution.Name",
      "error_message": "$.Error",
      "error_cause": "$.Cause"
    },
    "End": true
  }
}

然后在Lambda代码中,直接从event参数里读取execution_name字段即可。

小提示:Step Functions的内置上下文变量前缀是$$,而状态输入的变量前缀是$,别搞混啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:49:11