Combining AWS step function task and map outputs in to one array

Viewed 3783

I have a task state that outputs the following:

"batch": {
    "batch": "size",
    "currentTimestamp": 1596205376
  },

and a map state out outputs an array:

"batch": [
    {
      "batch": "product-batch-0",
      "currentTimestamp": 1596205376
    },
    {
      "batch": "product-batch-1",
      "currentTimestamp": 1596205376
    }
]

I would like to combine them so that the input to the state that follows the map state is this:

  "batch": [
    {
    "batch": "Size",
    "currentTimestamp": 1596205376
    },
    {
      "batch": "product-batch-22",
      "currentTimestamp": 1596205376
    },
    {
      "batch": "product-batch-8",
      "currentTimestamp": 1596205376
    }
]

Is this possible using the input/output processing available in aws step functions? I want to have them contained in one array so they can be processed together in an additional map state later in the state machine.

2 Answers

It is possible. try this.

  • ASL Definition
{
  "StartAt": "getArrayOfArray",
  "States": {
    "getArrayOfArray": {
      "Type": "Pass",
      "Parameters": {
        "arrayOfArray.$": "States.Array($.array, States.Array($.appendant))"
      },
      "Next": "mergeArray"
    },
    "mergeArray": {
      "Type": "Pass",
      "Parameters": {
        "mergedArray.$": "$.arrayOfArray[*][*]"
      },
      "End": true
    }
  }
}
  • input
{
  "array": [
    {
      "batch": "product-batch-0",
      "currentTimestamp": 1596205376
    },
    {
      "batch": "product-batch-1",
      "currentTimestamp": 1596205376
    }
  ],
  "appendant": {
    "batch": "size",
    "currentTimestamp": 1596205376
  }
}
  • output
{
  "mergedArray": [
    {
      "batch": "product-batch-0",
      "currentTimestamp": 1596205376
    },
    {
      "batch": "product-batch-1",
      "currentTimestamp": 1596205376
    },
    {
      "batch": "size",
      "currentTimestamp": 1596205376
    }
  ]
}
Related