AWS Step Function:函数.length()在Choice状态的variables字段中返回错误

我在AWS Step Function中有一个Choice状态,它将比较Input的数组长度,并决定进入下一个状态。

但是,获取数组长度的length()函数返回了一个错误:

{
“错误”:“States.Runtime”,
“cause”:“执行状态'CheckItemsCountState'时发生错误(input到事件ID#18)无效path'$ .Metadata [2] .Items.length()':select状态的条件path引用无效值。”

}

Choice状态的定义如下:

  "CheckItemsCountState":{ "Type": "Choice", "InputPath": "$", "OutputPath": "$", "Default": "NoItemsState", "Choices":[ { "Variable": "$.Metadata[2].Items.length()", "NumericGreaterThan": 0, "Next": "ProcessState" } ] }, 

状态连接了一些返回JSON的状态。 JSON如下所示:

 { "Metadata": [ { "foo": "name" }, { "Status": "COMPLETED" }, { "Items": [] } ] } 

所以我试图获取Metadata[2]Items的长度Metadata[2]并且如果值大于0,则进行比较。

我试图validation这个网站的JsonPath $.Metadata[2].Items.length() ,它返回0。

我不确定我是否错过了任何东西。 我在AWS Step Function的文档中找不到任何信息,或者在jsonpath中使用函数的示例。

我将不胜感激任何帮助。 谢谢!

步骤函数不允许您使用函数来获取值。 从select规则文档 :

对于每个操作符,相应的值必须是适当的types:string,数字,布尔值或时间戳记。

要做你所要求的,你需要获得前一个函数的数组长度,并将其作为输出的一部分返回。

 { "Metadata": [ { "foo": "name" }, { "Status": "COMPLETED" }, { "Items": [], "ItemsCount": 0 } ] } 

然后在步骤functionselect步骤中:

 "CheckItemsCountState":{ "Type": "Choice", "InputPath": "$", "OutputPath": "$", "Default": "NoItemsState", "Choices":[ { "Variable": "$.Metadata[2].ItemsCount", "NumericGreaterThan": 0, "Next": "ProcessState" } ] },