MaxConcurrency 属性如何用于 AWS Step Functions 中的 Map Task?

Dan*_*son 5 amazon-web-services aws-step-functions

更新:地图状态步骤模板创建一个步骤函数并运行它也会引发错误。这是强有力的证据表明该MaxConcurrency属性与Parameters值一起不起作用。

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

这可以通过使用地图任务文档中提供的示例(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
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

通过使用以下输入执行 step 函数:

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

Run Code Online (Sandbox Code Playgroud)

我们可以在执行事件历史记录中观察到:

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

步进功能失败。该ExecutionFailed步骤具有以下输出(省略了执行 ID):

{
  "error": "States.Runtime",
  "cause": "Internal Error (omitted)"
}
Run Code Online (Sandbox Code Playgroud)

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

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

WXM*_*Man 4

对今天早上提交给 AWS 的私人票证的回复;

\n\n
\n

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

\n\n

据我所知,您一直在使用步骤函数的新映射状态功能\n,并注意到当我们使用参数\n并将MaxConcurrency设置为低于迭代次数\n的值时\n(只有第一次迭代成功)失败并显示 \xe2\x80\x98States.Runtime\xe2\x80\x99\n ,看起来像是功能上的错误。

\n\n

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

\n\n

{\n "StartAt": "地图状态",\n "TimeoutSeconds": 3600,\n "状态": {\n "地图状态": {\n "类型": "地图\xe2\x80\x9d, \n "参数": {\n \xe2\x80\x9cContextValue.$\xe2\x80\x9d: "$$.Map.Item.Value"\n },\n "MaxConcurrency": 1,\n "迭代器": {\n "StartAt": "运行任务",\n "状态": {\n "运行任务": {\n "类型": "通过",\n "结束": true\n }\ n }\n },\n "下一步": "最终状态"\n },\n "最终状态": {\n "类型": "通过",\n "结束": true\n }\n } }

\n\n

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

\n\n
    \n
  1. 输入大小列表:4 MaxConcurrency:1/2/3 - 失败,MaxConcurrency:0/4/5 或以上 - 有效
  2. \n
  3. 输入大小列表:3 MaxConcurrency:1/2 - 失败,MaxConcurrency:0/3/4 或以上 - 有效
  4. \n
  5. 同样,我也通过从状态机中删除参数来执行测试,并且可以看到它在不同的 MaxConcurrency 值下按预期工作。
  6. \n
  7. 我还通过使用 \xe2\x80\x9cLambda\xe2\x80\x9d 更改 \xe2\x80\x9cPass\xe2\x80\x9d 的任务类型进行了相同的测试,并观察到相同的行为。
  8. \n
\n\n

因此,我可以确认,当我们在代码中包含参数并将 MaxConcurrency 值指定为除零或大于或等于列表大小的数字之外的任何值时,状态机会失败。

\n\n

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

\n\n

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

\n\n

祝你有美好的一天!

\n
\n\n

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

\n