【问题标题】:Synchronizing step function lambda map iterator同步阶跃函数 lambda 映射迭代器
【发布时间】:2021-08-30 17:52:05
【问题描述】:

我有两个 lambda(lambda1 和 lambda2),它们在一个步进函数映射迭代器中编排。因此,我有一个事件列表 E = [e1, e2, ..., e10],它充当此状态机映射迭代器的输入。这很好用,lambda1 以 e1 作为输入调用,并将其输出传递给 lambda2。这一切都按预期工作,并通过并行工作流程同时处理所有事件。

但是,我想在 lambda1 和 lambda2 之间添加某种逻辑,确保在成功处理所有并行事件之前不会调用 lambda2。事件 E = [e1, e2, ..., e10] 在完成和 lambda2 执行非幂等操作所需的时间上可能会有所不同。由于这个事实,我想避免运行任何 lambda2,直到 lambda1 成功处理所有事件 E。但是一旦它们被成功处理,我想用 lambda2 来处理 lambda1 的输出。

这种 lambda 编排是否过于复杂而无法在不涉及其他资源(例如 SNS/SQS 或 dynamodb 中的状态处理)的情况下创建(仅举几例)?

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    找到了解决办法。棘手的是在地图迭代器之间添加一个通过状态。将输出从传递状态传递给 lambda2 迭代器时,我也遇到了问题。它首先作为列表传递:

    [
      {object_iteration1}
      {object_iteration2}
              .
              .
    ]
    

    但是,这并没有为 lambda2 迭代器映射提供有效输入。这可以通过在以下参数下添加输出来解决:

    "pass-state": {
      "Type": "Pass",
      "Parameters": {
        "lambda1_output.$": "$"
      },
      "Next": "Lambda2"
    },
    

    我仍然不清楚它为什么起作用。但确实如此。也许将来有人可以进一步详细说明。 step 函数现在按预期工作,我将把它留给其他人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      • 2018-05-21
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 2021-03-03
      相关资源
      最近更新 更多