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

如何使用Token恢复已暂停的Step Functions状态机?

用Token恢复暂停的AWS Step Functions状态机

我来帮你捋清楚这个流程,之前我在项目里正好用过这个功能,其实逻辑挺清晰的:

一、Token如何定位暂停的状态机?

当你的状态机进入等待回调的任务状态(也就是在Task状态里设置了WaitForTaskToken参数),Step Functions会自动生成一个唯一的taskToken。这个Token本身就和当前暂停的状态执行实例强绑定——它内部包含了足够的上下文信息(比如状态机ARN、具体的执行ID、暂停的节点位置等),不需要你额外去“定位”状态机,只要持有这个Token,就能直接对应到那个暂停的执行实例。

你可以通过这几种方式获取这个Token:

  • 最直接的:如果暂停的任务是Lambda或者其他支持输入的服务,taskToken会直接出现在任务的输入参数里(比如Lambda的事件对象里就能拿到这个字段)。
  • 备选方案:调用DescribeExecution接口,在返回的executionStatus和details里能查到相关的Token信息;或者查看状态机的CloudWatch日志,里面也会记录这个Token。

二、调用哪个API恢复运行?

恢复暂停的状态机需要根据任务的结果调用对应的API:

  • 如果任务成功完成,调用 SendTaskSuccess:这个API会告诉Step Functions,暂停的任务已经成功,状态机可以继续执行后续流程。
  • 如果任务失败,调用 SendTaskFailure:状态机会进入失败分支,或者根据你的错误处理逻辑执行对应的流程。
  • 另外还有SendTaskHeartbeat,用来定期发送心跳,避免Step Functions因为任务超时而标记执行失败。

举个AWS CLI的示例(调用SendTaskSuccess):

aws stepfunctions send-task-success \
  --task-token "arn:aws:states:us-east-1:123456789012:execution:MyStateMachine:abc123:xyz789" \
  --task-output '{"result": "任务执行完成,返回结果"}'

再给个Python boto3的示例:

import boto3

sf_client = boto3.client('stepfunctions')

# 恢复暂停的状态机,传入拿到的taskToken和任务输出
response = sf_client.send_task_success(
    taskToken="你的taskToken内容",
    taskOutput='{"key": "任务执行结果"}'
)

print(response)

只要正确传入taskToken,Step Functions就会自动找到对应的暂停实例,继续执行后续的状态流转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:22:43