繁体   English   中英

MaxConcurrency 属性如何适用于 AWS Step Functions 中的 Map 任务?

[英]How does the MaxConcurrency attribute work for the Map Task in AWS Step Functions?

更新:Map State步骤模板创建步骤 function 并运行也会引发错误。 这是MaxConcurrency属性和Parameters值不起作用的有力证据。

我无法在步骤 function 定义中成功使用MaxConcurrency属性。

这可以通过使用 Map 任务文档中提供的示例(自 2019 年 9 月 18 日起新增)来演示:

{
  "StartAt": "ExampleMapState",
  "States": {
    "ExampleMapState": {
      "Type": "Map",
      "MaxConcurrency": 2,
      "Parameters": {
        "ContextIndex.$": "$$.Map.Item.Index",
        "ContextValue.$": "$$.Map.Item.Value"
      },
      "Iterator": {
         "StartAt": "TestPass",
         "States": {
           "TestPass": {
             "Type": "Pass",    
             "End": true
           }
         }
      },
      "End": true
    }
  }
}

通过使用以下输入执行步骤 function:

[
  {
    "who": "bob"
  },
  {
    "who": "meg"
  },
  {
    "who": "joe"
  }
]

我们可以在我们得到的Execution 事件历史记录中观察到:

  • ExecutionStarted
  • MapStateEntered
  • MapStateStarted
  • MapIterationStarted (索引 0)
  • MapIterationStarted (索引 1)
  • PassStateEntered (索引 0)
  • PassStateExited (索引 0)
  • MapIterationSucceeded (索引 0)
  • ExecutionFailed

步骤 function 失败。 ExecutionFailed步骤具有以下 output(省略执行 ID):

{
  "error": "States.Runtime",
  "cause": "Internal Error (omitted)"
}

尝试使用 Catch 步骤捕获错误无效。

我在这里做错了什么? 这是一个错误吗?

对今天早上提交给 AWS 的私人票据的回应;

感谢您联系 AWS 高级支持。 我的名字是 Akanksha,我将协助您处理此案。

我了解您一直在使用新的 Map state 功能的阶跃函数,并注意到当我们使用参数以及将 MaxConcurrency 设置为低于迭代次数的值(只有第一次迭代成功)时,它会因“States.Runtime”而失败' 并且看起来像功能的错误。

感谢您提供详细信息。 它在故障排除期间帮助了我。 为了确认行为,我使用了下面的 state 机器示例和 Pass:

{ "StartAt": "Map State", "TimeoutSeconds": 3600, "States": { "Map State": { "Type": "Map", "Parameters": { "ContextValue.$": "$$. Map.Item.Value" }, "MaxConcurrency": 1, "Iterator": { "StartAt": "Run Task", "States": { "Run Task": { "Type": "Pass", "End" : true } } }, "Next": "Final State" }, "Final State": { "Type": "Pass", "End": true } } }

我使用多个输入列表和 MaxConcurrency 值进行了测试,以下是我的观察结果:

  1. 输入大小列表:4 MaxConcurrency:1/2/3 - 失败和 MaxConcurrency:0/4/5 或以上 - 有效
  2. 输入大小列表:3 MaxConcurrency:1/2 - 失败和 MaxConcurrency:0/3/4 或以上 - 有效
  3. 同样,我也通过从 state 机器中删除参数来执行测试,并且可以看到它在不同的 MaxConcurrency 值下按预期工作。
  4. 我还通过将“Pass”的任务类型更改为“Lambda”进行了测试,并观察到了相同的行为。

因此,我可以确认 state 机器在代码中有参数并将 MaxConcurrency 值指定为非零或大于或等于列表大小的数字时失败。

在对这种行为进行了一些研究以检查这是否是有意的之后,我找不到太多关于此行为的信息,因为这是一项新功能。 因此,我将与您提供的所有详细信息和示例 state 机器联系内部团队。 感谢您通知我们。 收到内部团队的最新消息后,我会尽快与您联系。 请放心,我会定期跟进团队并与他们合作进一步调查。

同时,如果您有任何其他疑问或疑虑,请告诉我。

祝您有美好的一天!

当我得到更多信息时,我会在这里更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM