AWS阶跃函数 - 添加动态值传递状态类型

时间:2019-01-31 03:26:20

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

我在状态机中定义了以下状态。

 "loop":{
      "Type": "Pass",
      "Result":{
        "totalCount": "$.newFieldsResponse.body.count",
        "currentCount": 0,
        "step": 1
      },
      "ResultPath": "$.iteration",
      "Next":"iterateLoop"
    },

我希望状态输出为:

"newFieldsResponse": {
      "isSuccess": true,
      "error": "",
      "body": {
        "count": 2,
        "fields": [...]
      }
    },
    "iteration": {
      "totalCount": 5,
      "currentCount": 0,
      "step": 1
    }
  }

迭代属性被添加到输入与TOTALCOUNT属性被设置为计数字段数组项的

但是,“ iteration”属性的输出设置为:

"iteration": {
      "totalCount": "$.newFieldsResponse.body.count",
      "currentCount": 0,
      "step": 1
    }

看起来值“ $ .newFieldsResponse.body.count”没有得到解析,而是按原样输出。

我在做错什么吗?别人在如何使它工作,请咨询?

4 个答案:

答案 0 :(得分:2)

它可以结合以下两种解决方案一起工作:

  1. 在“通过”步骤中添加参数
  2. 在要传递的var名称中添加*。$:
 {
  "loop": {
    "Type": "Pass",
    "parameters": {
      "totalCount.$": "$.newFieldsResponse.body.count",
      "currentCount": 0,
      "step": 1
    },
    "ResultPath": "$.iteration",
    "Next": "iterateLoop"
  }
 }

答案 1 :(得分:1)

这可以通过处于通过状态的“参数”来实现 https://docs.aws.amazon.com/step-functions/latest/dg/amazon-states-language-pass-state.html

“循环”:{       “类型”:“通过”,       “参数”:{         “ totalCount”:“ $ .newFieldsResponse.body.count”,         “ currentCount”:0,         “步骤1       },       “ ResultPath”:“ $ .iteration”,       “下一个”:“ iterateLoop”     }

答案 2 :(得分:1)

在弄清楚之前,我也一直坚持下去。

可以使用通过状态,但是@ankitkanojia和@shashi的答案需要稍作修改。

如果要使用输入路径,则参数内的键必须以“。$”(“ totalCount。$”)结尾

因此状态说明应如下:

"loop":{
      "Type": "Pass",
      "Result":{
        "totalCount.$": "$.newFieldsResponse.body.count",
        "currentCount": 0,
        "step": 1
      },
      "ResultPath": "$.iteration",
      "Next":"iterateLoop"
    },

答案 3 :(得分:0)

看起来不可能这样。 我所做的解决方法是使用“参数”属性。从AWS文档中: “对于使用路径选择值的键值对,键名必须以*。$结尾。”。

因此通过以下方法解决了上述问题:

  1. 更改通过状态以删除任何动态值引用
"loop":{
      "Type": "Pass",
      "Result":{
        "currentCount": 0,
        "step": 1
      },
      "ResultPath": "$.iteration",
      "Next":"iterateLoop"
    },
  1. 在需要以下值的地方创建一个Parameters属性:
 "iterateLoop":{
      "Type":"Task",
      "Resource": "arn:aws:lambda:....r",
      "Parameters":{
        "totalCount.$": "$.newFieldsResponse.body.count",
        "currentCount.$": "$.iteration.currentCount",
        "step.$": "$.iteration.step"
      },
      "ResultPath": "$.iteration",
      "Next":"continueLoop"
    },

totalCount,currentCount和step都使用状态输入中的路径读取值。密钥末尾必须附加“。$”。