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

时间:2019-09-24 15:34:53

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

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

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

这可以通过使用documentation中提供的Map Task示例(于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
    }
  }
}

通过使用以下输入执行步进功能:

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

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

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

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

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

尝试通过“捕获”步骤捕获错误没有效果。

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

1 个答案:

答案 0 :(得分:1)

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

  

感谢您与AWS Premium支持联系。我叫阿寒喀什,   在这种情况下,我将协助您。

     

我了解您一直在使用新的地图状态功能   的步函数,并注意到当我们使用参数   MaxConcurrency设置为低于迭代次数的值   (只有第一次迭代成功),失败的状态是“ States.Runtime”   并且看起来像是该功能的错误。

     

感谢您提供详细信息。它对我有帮助   故障排除。为了确认行为,我使用了以下内容   Pass的状态机示例:

     

{               “ StartAt”:“地图状态”,               “超时时间”:3600,               “状态”: {                 “地图状态”:{                   “ Type”:“地图”,                   “参数”:{                     “ ContextValue。$”:“ $$。Map.Item.Value”                   },                   “ MaxConcurrency”:1                   “迭代器”:{                     “ StartAt”:“运行任务”,                     “状态”: {                       “运行任务”:{                         “类型”:“通过”,                         “结束”:true                       }                     }                   },                   “下一个”:“最终状态”                 },                 “最终状态”:{                   “类型”:“通过”,                   “结束”:true                 }               }

     

我测试了多个输入列表和MaxConcurrency值以及以下   是我的观察结果

     
      
  1. 输入大小列表:4 MaxConcurrency:1/2/3-失败,并且MaxConcurrency:0/4/5或更高版本-有效
  2.   
  3. 输入大小列表:3 MaxConcurrency:1/2-失败,并且MaxConcurrency:0/3/4或更高-有效
  4.   
  5. 类似地,我也通过从状态机中删除参数来执行测试,并且可以看到它在不同的状态下都可以正常工作   MaxConcurrency值。
  6.   
  7. 我还通过将“通过”的任务类型更改为“ Lambda”进行了测试,并观察到相同的行为。
  8.   
     

因此,我可以确认状态机发生故障时   代码中的参数,并将MaxConcurrency值指定为任何值   大于零或大于或等于列表大小的数字。

     

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

     

同时,如果您还有其他疑问或疑虑,请让我   知道。

     

祝您有美好的一天!

获得更多信息后,我将在这里更新。