AWS Step Function - 向传递状态类型添加动态值

Fur*_*ikh 7 json jsonpath amazon-web-services aws-step-functions

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

 "loop":{
      "Type": "Pass",
      "Result":{
        "totalCount": "$.newFieldsResponse.body.count",
        "currentCount": 0,
        "step": 1
      },
      "ResultPath": "$.iteration",
      "Next":"iterateLoop"
    },
Run Code Online (Sandbox Code Playgroud)

我希望状态的输出是:

"newFieldsResponse": {
      "isSuccess": true,
      "error": "",
      "body": {
        "count": 2,
        "fields": [...]
      }
    },
    "iteration": {
      "totalCount": 5,
      "currentCount": 0,
      "step": 1
    }
  }
Run Code Online (Sandbox Code Playgroud)

迭代属性被添加到输入中,totalCount 属性被设置为字段数组中的项目数。

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

"iteration": {
      "totalCount": "$.newFieldsResponse.body.count",
      "currentCount": 0,
      "step": 1
    }
Run Code Online (Sandbox Code Playgroud)

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

有什么我做错了吗?有人可以就如何使其工作提出建议吗?

小智 11

它结合了此处公开的两种解决方案:

  1. 在传递步骤中添加参数
  2. 在要传递的变量名称中添加 *.$:
 {
  "loop": {
    "Type": "Pass",
    "parameters": {
      "totalCount.$": "$.newFieldsResponse.body.count",
      "currentCount": 0,
      "step": 1
    },
    "ResultPath": "$.iteration",
    "Next": "iterateLoop"
  }
 }
Run Code Online (Sandbox Code Playgroud)


sha*_*shi 8

这可以通过传递状态中的“参数”来实现

JSON

{
  "loop": {
    "Type": "Pass",
    "Parameters": {
      "totalCount": "$.newFieldsResponse.body.count",
      "currentCount": 0,
      "step": 1
    },
    "ResultPath": "$.iteration",
    "Next": "iterateLoop"
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 我需要将 `"totalCount"` 更改为 `"totalCount.$"` (4认同)

Fur*_*ikh 2

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

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

  1. 更改传递状态以删除任何动态值引用
"loop":{
      "Type": "Pass",
      "Result":{
        "currentCount": 0,
        "step": 1
      },
      "ResultPath": "$.iteration",
      "Next":"iterateLoop"
    },
Run Code Online (Sandbox Code Playgroud)
  1. 创建一个参数属性,我需要如下值:
 "iterateLoop":{
      "Type":"Task",
      "Resource": "arn:aws:lambda:....r",
      "Parameters":{
        "totalCount.$": "$.newFieldsResponse.body.count",
        "currentCount.$": "$.iteration.currentCount",
        "step.$": "$.iteration.step"
      },
      "ResultPath": "$.iteration",
      "Next":"continueLoop"
    },
Run Code Online (Sandbox Code Playgroud)

TotalCount、currentCount 和 step 均使用状态输入中的路径读取值。密钥末尾需要附加“.$”。