如何找出这是否是AWS步骤函数映射任务中的最后一次迭代?

发布于 2025-01-20 02:32:32 字数 265 浏览 0 评论 0原文

我有一个地图状态,可以迭代我的数组。在地图状态内,有一个lambda任务和等待任务。等待任务是等待的时间,我只需要在迭代之间等待。因此,我想跳过等待这是最后一次迭代,因为不需要它。

每次项目都不同并且数量不同时。

,地图上下文只有 $$。map.item.index $$。 item.Value 变量。例如,我找不到任何变量,例如,总数的总数。

我该如何实现?

I have a Map state which iterates my array. Inside the map state, there is a Lambda task and a Wait task. The Wait task is waiting much time, and I need to wait only between iterations. So I would like to skip waiting if this is the last iteration because there is no need for it.

Every time the items are different and their amount is different.

However, the Map context has only $$.Map.Item.Index and $$.Map.Item.Value variables. I couldn't find any mention of any variable with the total amount of steps for example.

How can I achieve that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

堇年纸鸢 2025-01-27 02:32:32

我的理解:每次执行都有任意数量的Map项,这些Map项应该串行运行(即MaxConcurrency:1)。您希望在最后一项之后没有任何延迟。例如,包含 4 个项目 [A, B, C, D] 的执行应按以下顺序运行:Lambda(A)、Wait、Lambda(B)、Wait、Lambda( C),等等,Lambda(D)。单项执行 [A] 应仅运行 Lambda(A)

这是一种方法:

[更新 - 2022 年末:使用新的 ArrayLengthMathAdd 内在函数 我们可以计算最后一个项目索引没有 lambda - 请参阅下面的"LastItemIndex.$"]

  1. 在地图状态之前插入 Lambda 任务。 Lambda 对项目进行计数并将最后一个项目的索引输出到 $.itemsCounter.lastItemIndex

  2. 使用 地图状态上的参数

// add to the Map State definition - overrides what each iteration receives
"Parameters": {
  "Index.$": "$.Map.Item.Index",
  "Data.$": "$.Map.Item.Value",  // by default, each iteration just gets this
  "LastItemIndex.$": "States.MathAdd(States.ArrayLength($.Execution.Input.Items), -1)", // 3 for {"Items": [A,B,C,D]}
},
  1. Lambda 之间的地图内添加 ShouldWait? 选择状态任务和等待状态。继续等待,除非 $.Index 等于 $.LastItemIndex

My understanding: Each execution has an arbitrary number of Map items that should run serially (i.e. MaxConcurrency:1). You want no delay after the last item. For instance, an execution with 4 items [A, B, C, D] should run in the following order: Lambda(A), Wait, Lambda(B), Wait, Lambda(C), Wait, Lambda(D). A single-item execution [A] should run Lambda(A) only.

Here is one way to do it:

[Update - late 2022: Using the new ArrayLength and MathAdd intrinsic functions we can calculate the last item index without a lambda - see "LastItemIndex.$" below]

  1. Insert a Lambda Task before the Map State. The Lambda counts the items and outputs the last item's index to $.itemsCounter.lastItemIndex.

  2. Add the last item and the item index to the Map iterations' payloads with Parameters on the Map State:

// add to the Map State definition - overrides what each iteration receives
"Parameters": {
  "Index.
quot;: "$.Map.Item.Index",
  "Data.
quot;: "$.Map.Item.Value",  // by default, each iteration just gets this
  "LastItemIndex.
quot;: "States.MathAdd(States.ArrayLength($.Execution.Input.Items), -1)", // 3 for {"Items": [A,B,C,D]}
},
  1. Add a ShouldWait? Choice State inside the Map between the Lambda Task and Wait State. Proceed to Wait unless $.Index equals $.LastItemIndex.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文