关于亚马逊网络服务:以编程方式重新运行SWF工作流

Programmatically Re-Running SWF Workflows

我们有数千个SWF工作流在过去一年中由于各种活动错误而失败。由于这些错误的寿命很长,因此所有活动重试均失败,并且工作流已关闭。我想重新运行所有那些失败的工作流程,以最后执行(失败)的活动为准。基本的工作流程重新触发。

SWF控制台有一个"重新运行"命令,但是它一次只能选择25个工作流程,远远少于我需要的数千个工作流程。

我可以使用CLI start-workflow-execution命令(或类似的API调用),但是我不知道如何通过控制台的"重新运行"操作来获取最新的工作流输入做。我可以从get-workflow-execution-history获取最新的工作流输入,但是这要求我知道最新的runId,而且我找不到任何方法来获取它。

总结:

  • 我可以想到的以编程方式重新运行SWF工作流的唯一方法是:对于每个失败的工作流,神奇地捕获其最新的runId,然后通过get-workflow-execution-history捕获其最新的工作流输入,然后通过。有没有更好的办法?
  • 如果对#1的回答是"没有更好的方法,"那么我如何找到特定workflowId的最新runId
  • (我找不到有关此类触发器的任何文档或讨论的事实,使我担心自己会以错误的方式进行操作,因此欢迎您提出反馈意见。)

    更新:更高级别的问题:处理由于错误情况导致所有重试的时间终止的工作流的正确方法是什么?重新触发SWF工作流非常困难,这一事实使我认为我误解了SWF范例。


  • 听起来很合理。请注意,重新执行工作流程不会从上一次失败的活动开始,而是从头开始(历史记录为空)。
  • 您可以使用ListClosedWorkflowExecutions获取最新的runId。请注意,它支持workflowId作为过滤器参数。
  • UPDATE: Higher level question: What is the right way to handle workflows that terminated due to error conditions that outlasted all retries?

    SWF保留了从整个工作流程执行历史记录开始一直失败的所有内容,可以重试该工作流程。不幸的是,开箱即用的AWS Flow Framework不会从上一次运行中执行状态还原。但这不是固有的限制,可以添加此功能。

    UPDATE 2:

    Temporal Workflow临时平台,基于与SWF相同的高级思想,它确实支持重置功能,该功能允许通过创建具有历史记录子集的新运行从任何点重新启动工作流。


    我认为您不能以这种方式来做。最大工作流历史记录保留时间为90天,因此即使您沿用获取工作流执行历史记录的路径,也可以重新启动过去90天失败的工作流
    此外,aws对帐户的数量和速率也有帐户级别的限制,因此您可以进行swf api调用,因此一旦开始循环调用以获取历史记录并启动工作流程,您就太早达到该级别并开始出现异常。
    解决此问题的更好方法是查看工作流执行从何处开始,并通过传入相同的输入来再次重新运行失败的执行。