将输入传递给 Step Function 中的迭代器及其输出,同时保持迭代器输出

Passing input to Iterator in Step Function along to its output while keeping iterator output

我有一个进入并行 lambda 的 Step Function 状态机,一旦所有并行 lambda 都完成,就会执行一个最终的 lambda

示例定义

{
  "Comment": "An example of the Amazon States Language using a map state to process elements of an array with a max concurrency of 2.",
  "StartAt": "Map",
  "States": {
    "Map": {
      "Type": "Map",
      "ItemsPath": "$.my_list",
      "Parameters": {
        "list_item.$": "$$.Map.Item.Value",
        "input_1.$": "$.input_1",
        "input_2.$": "$.input_2"
      },
      "MaxConcurrency": 2,
      "Next": "Final",
      "Iterator": {
        "StartAt": "Parallel Step",
        "States": {
          "Parallel Step": {
            "Type": "Task",
            "Resource": "arn:aws:states:::lambda:invoke",
            "Parameters": {
              "FunctionName": "arn:aws:lambda:us-east-1:<>:function:parallel-lambda:$LATEST",
              "Payload": {
                "Input.$": "$"
              }
            },
            "OutputPath": "$.Payload",
            "End": true
          }
        }
      }
    },
    "Final": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Parameters": {
        "FunctionName": "arn:aws:lambda:us-east-1:<>:function:final-lambda:$LATEST",
        "Payload": {
          "Input.$": "$"
        }
      },
      "End": true
    }
  }
}

并行 lambda 的输出类似于

{'statusCode': 200, 'n-successes': n_successes}

现在我的 Final lambda 的输入正在获取这些输出的列表。我确实想要。但是有没有办法将进入并行 lambda 的一些输入传递到最终的 lambda。

理想情况下,我最终的 lambda 输入应该是这样的

{'input_1': input_1_val,
 'input_2': input_2_val,
 'parallel_outputs': [{'statusCode': 200, 'n-successes': 5}, ...]

我知道我可以在我的并行 lambda 输出中传递它,但是在输出列表中重复多次相同的输入值似乎效率低下

看来您需要使用 $.ResultPath 而不是 $.OutputPath

AWS Docs: Use ResultPath to Include the Result with the Input