如何在 AWS 中检索 运行 Step Functions 的当前状态

How to retrieve the current state of a running Step Functions in AWS

我正在试用 AWS 的 Step Functions,我对它们用于实施长 运行 程序很感兴趣。我想为用户提供的一项功能是可以显示执行进度。使用 describeExecution 我可以验证某些执行是否仍在 运行 或已完成。但进度是一种合乎逻辑的衡量标准,Step Functions 本身无法告诉我流程还剩多少。

为此,我需要自己提供逻辑。我可以测量状态机任务的进度,知道需要采取的总步骤数并计算已经采取的步骤数。我可以将此信息存储在机器处于 运行 时在步骤之间传递的机器状态中。但是如何使用 API 提取此状态?当然,我可以存储这些信息是像 DynamoDb 这样的外部存储,但那不是很优雅!

我自己找到的解决方案(到目前为止这是唯一的)是使用 getExecutionHistory API。此 API 返回了为 Step Functions 生成的事件列表,它可以包含 inputoutput(或两者都不包含),具体取决于事件是用于启动 lambda 函数还是是在 lambda 函数退出的时候。您可以这样调用 API:

var params = {
  executionArn: 'STRING_VALUE', /* required */
  maxResults: 10,
  reverseOrder: true
};
stepfunctions.getExecutionHistory(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

通过颠倒事件列表的顺序,我们可以先获取最新的。然后我们可以在列表中查找最新的输出。您将找到的第一个是最新版本的输出,即 Step Functions 的当前状态。