Невозможно передать массив в следующую задачу в AWS StepFunction - PullRequest
0 голосов
/ 11 мая 2019

Работает с StepFunction AWS, которая получает массив дат из лямбда-вызова, а затем передает задачу , которая должна принимать этот массив в качестве параметра для передачи в лямбду.

Задача Get Date Range работает нормально и выводит массив дат:

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

... и массив передается в задачу ProcessDateRange, но я не могу присвоить массиву параметр range.

Буквально пытается передать это: "$.rng" вместо этого:

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

Вот 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"
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Если вы хотите, чтобы параметр интерпретировался как путь JSON вместо литеральной строки, добавьте «. $» В конец имени параметра.Чтобы изменить ваш пример:

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

Соответствующие документы здесь: https://docs.aws.amazon.com/step-functions/latest/dg/connectors-parameters.html#connectors-parameters-path

0 голосов
/ 11 мая 2019

Это потому, что вы используете неправильный синтаксис для лямбда-задач. Чтобы указать ввод, вам нужно установить клавишу InputPath, например:

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