【问题标题】:AWS Step Functions invoke Dynamic Parallel Step FunctionsAWS Step Functions 调用动态并行 Step Functions
【发布时间】:2020-09-05 01:31:33
【问题描述】:

我正在使用阶梯函数工作流解决问题。

问题是这样的,我有 10 个 AWS Batch 作业的工作流。

前 3 个作业按顺序运行,4-7 个作业是动态步骤,即它们需要按照指定的不同参数运行多次。

对于每个 4-5-6-7 工作流,根据参数数量,会多次执行 8-9-10 作业。

看起来 Map 最适合这里,但如果任何作业在 4-5-6-7 的地图状态下失败,则整个步骤都会失败。我不希望一次执行影响另一次执行。

方法: 我设计了 3 个步骤功能。第一步函数运行 1-3 个作业,最后一步调用一个 lambda 函数,该函数提交多次执行 4-5-6-7 个作业。并且对于每个 4-5-6-7 执行,都会触发另一个 lambda 以提交 8-9-10 作业的多次执行。

我正在通过 lambda 函数手动连接步进函数。

这是正确的方法还是有更好的方法?

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-step-functions aws-batch


    【解决方案1】:

    我会建议更多元素,以使您的解决方案更适合生产。

    首先,我建议您消除 Lambda 函数调用,并将“运行作业”(.sync:2) service integration 用于嵌套工作流。我昨天刚刚对此进行了Twitch episode

    其次,如果您想在 Map State 内执行失败后继续,请确保您正在实施 Catchers(以及可选的 Retriers)。我在上周二做了一个Twitch episode,上面链接的第一个视频中有一些关于错误处理的讨论。

    所以对于你的具体情况,我建议你:

    1. 首先将 8-9-10 步骤变成一个独立的工作流程(孩子 A)
    2. 通过地图状态内的“运行作业”服务集成从步骤 4-5-6-7 调用子 A
    3. 将步骤 4-5-6-7 迁移到独立的工作流程(子 B)
    4. 再次通过“运行作业”服务集成从父工作流调用子 B(步骤 1-2-3)

    有关 Step Functions 和 Lambda 函数中的并行性的更多信息,请参阅this Twitch episode

    this repo on GitHub 中提供了上述所有代码示例。


    我代表我的雇主亚马逊做出了贡献。我的贡献是在 MIT 许可下获得许可的。更详细的解释见here

    【讨论】:

    • 这是一个很好的建议,但如果其中一个地图状态失败,我们如何重新运行阶梯函数唯一失败的状态。甚至一般来说,我们如何在不执行已经执行的状态的情况下重新运行失败的状态
    • 此链接显示了一种从任何状态 aws.amazon.com/blogs/compute/… 重新启动 step 功能的方法。如果这是唯一的选择,我们是否需要重新运行整个地图状态
    • 您在地图状态迭代器内部添加retrier/catcher。这样它只会在不成功的迭代中运行。
    • 假设 4-5-6-7 第 6 批作业中是否有 bug。那项工作失败了,即使重试也失败了,也许我们会抓住它。但是,当我们解决问题时,我们如何确保它只运行失败的作业,而不是全部运行。
    • 您可以使用捕手将失败的作业发送到死信队列。
    猜你喜欢
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多