Search code examples
amazon-web-servicesaws-lambdaaws-step-functions

Cannot pass array to next task in AWS StepFunction


Working on an AWS StepFunction that gets an array of dates from a Lambda call, then passes to a Task that should take that array as a parameter to pass into a lambda.

The Get Date Range task works fine and outputs the date array:

{
  "rng": [
    "2019-05-07",
    "2019-05-09"
  ]
}

...and the array gets passed into the ProcessDateRange task, but I cannot assign the array the range Parameter.

It literally tries to pass this: "$.rng" instead of this:

[
    "2019-05-07",
    "2019-05-09"
  ]

Here's the StateMachine:

{
  "StartAt": "Try",
  "States": {
    "Try": {
      "Type": "Parallel",
      "Branches": [{
        "StartAt": "Get Date Range",
        "States": {                  
         "Get Date Range": {
            "Type": "Task",
            "Resource": "arn:aws:lambda:us-east-1:123456789:function:get-date-range",
           "Parameters": {
                            "name": "thename",
                            "date_query": "SELECT date from sch.tbl_dates;",
                            "database": "the_db"                          
                        }
          ,     
            "ResultPath": "$.rng",
            "TimeoutSeconds": 900,
            "Next": "ProcessDateRange"            
          },
         "ProcessDateRange": {
            "Type": "Task",
            "Resource": "arn:aws:lambda:us-east-1:123456789:function:process-date-range",
           "Parameters": {                            
                            "range": "$.rng"                            
                        },
           "ResultPath": "$",
            "Next": "Exit"
          },
          "Exit": {
            "Type": "Succeed"
          }
        }
      }],
      "Catch": [{
        "ErrorEquals": ["States.ALL"],
        "ResultPath": "$.Error",
        "Next": "Failed"
      }],
      "Next": "Succeeded"
    },
    "Failed": {
      "Type": "Fail",
      "Cause": "There was an error. Please review the logs.",
      "Error": "error"
    },
    "Succeeded": {
      "Type": "Succeed"
    }
  }
}

Solution

  • This is because you are using the wrong syntax for Lambda tasks. To specify the input you need to set the InputPath key, for example:

    "ProcessDateRange": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-1:123456789:function:process-date-range",
      "InputPath": "$.rng",
      "ResultPath": "$",
      "Next": "Exit"
    },