无法将数组传递给AWS StepFunction中的下一个任务

时间:2019-05-10 22:31:00

标签: amazon-web-services aws-lambda aws-step-functions

正在研究一个AWS StepFunction,该函数从Lambda调用中获取日期数组,然后传递给 Task ,该任务应将该数组作为参数传递给lambda。

Get Date Range任务运行正常,并输出日期数组:

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

...并且该数组被传递到ProcessDateRange任务中,但是我无法为该数组分配range参数。

它实际上是尝试传递以下内容:"$.rng"而不是:

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

这是国家机器:

{
  "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 :(得分:0)

这是因为您对Lambda任务使用了错误的语法。要指定输入,您需要设置InputPath键,例如:

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

答案 1 :(得分:0)

如果要将参数解释为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