以编程方式重新运行SWF工作流程

时间:2015-08-18 20:03:07

标签: amazon-web-services amazon-swf

由于各种活动错误,我们有几千个SWF工作流程在过去一年中失败了。由于错误是长期存在的,因此所有活动重试都失败并且工作流程已关闭。我想重新运行所有这些失败的工作流程,接受上次执行的活动(并且失败)。基本工作流程重新触发。

SWF控制台有一个Re-Run命令,但它只允许您一次选择二十五个工作流程,远远少于我需要的数千个工作流程。

我可以使用CLI start-workflow-execution命令(或类似的API调用),但我无法确定在何处以控制台的“重新运行”操作的方式获取最新的工作流输入。我可以从get-workflow-execution-history获取最新的工作流输入,但这需要我知道最新的runId,我找不到任何方法来获取它。

总结:

  1. 我能够以编程方式重新运行SWF工作流程的唯一方法是:对于每个失败的工作流程,神奇地抓取其最新的runId,然后通过get-workflow-execution-history获取其最新的工作流输入,然后重新启动它通过start-workflow-execution使用该输入。还有更好的方法吗?
  2. 如果对#1的回答是“没有更好的方法”,那么如何找到特定runId的最新workflowId
  3. (事实上,我找不到任何关于这种重新发现的文件或讨论,这让我担心我接近这个错误的方式,所以我欢迎反馈让我直截了当。)

    更新:更高级别的问题:处理由于超出所有重试的错误条件而终止的工作流的正确方法是什么?重新触发SWF工作流程这么困难的事实让我觉得我误解了SWF范式。

2 个答案:

答案 0 :(得分:2)

  1. 听起来很合理。请注意,重新执行工作流程并不会从上次失败的活动重新启动它,而是从头开始(历史记录为空)。
  2. 您可以使用ListClosedWorkflowExecutions获取最新的" runId"。请注意,它支持workflowId作为过滤器参数。
  3.   

    更新:更高级别的问题:处理由于超出所有重试的错误条件而终止的工作流的正确方法是什么?

    SWF拥有从失败点重试工作流程的所有内容,因为整个工作流程执行历史记录都会保留。不幸的是,开箱即用的AWS Flow Framework并没有执行上一次运行的状态恢复。但这不是固有的限制,可以添加此功能。

答案 1 :(得分:1)

我认为你不能以这种方式做到这一点。最大工作流程历史记录保留期为90天,因此即使您沿着获取工作流程执行历史记录的路径,您也可以在过去90天内重新启动失败的工作流程 此外,aws对您可以进行swf api呼叫的数量和速率有一个帐户级限制,因此一旦您开始循环调用以获取历史记录并启动工作流程,您将很快达到此级别并开始获得异常。 更好的方法是查看工作流程执行的起始点,然后通过传入相同的输入再次运行失败的执行。