状态机将不接受输入路径

问题描述

我敢肯定有人会告诉我一个即时的解决方案,但我已经在这个问题上呆了几个小时了,所以我只是想问一下。

我无法让状态机接受初始输入。目的是设置一个指向状态机的 EventBridge 触发器,并将静态 JSON 传递给 SM,以使用适当的参数启动。在开发中,当您选择“新执行”时,我只是使用 Step Functions 选项来传递 JSON 作为初始输入。

这是输入:

{"event":{
  "country": "countryA","landing_bucket": "aws-glue-countryA-inputs","landing_key": "countryA-Bucket/prefix/filename.csv","forecast_bucket": "aws-forecast-countryA","forecast_key": "inputs/","date_start": "2018-01-01","validation": "False","validation_size": 90
} 
}

查看 ExecutionStarted 日志条目中传递的内容时:

{
  "input": {
  "country": "countryA","validation_size": 90
},"inputDetails": {
    "truncated": false
  },"roleArn": "arn:aws:iam::a-valid-service-role"
}

这是状态机:

  "Comment": "A pipeline!","StartAt": "Invoke Preprocessor","States": {
    "Invoke Preprocessor": {
      "Type": "Task","Resource": "arn:aws:states:::lambda:invoke","InputPath": "$.input","Parameters": {
        "FunctionName": "arn:aws:lambda:my-lambda-arn:$LATEST"
      },"Next": "EndSM"
    },"EndSM": {
      "Type": "Pass","Result": "Ended","End": true
    }
  }
}

我尝试了几乎所有我能想到的方法,从更改 InputPath 到将“输入”字典直接分配给变量: "$.event":"$.input" 要深入到各个变量并直接分配这些变量,例如: "$.country:"$.country"。我还使用了新的 Step Functions 数据流模拟器,但无处可去。如果有人有任何想法,我将不胜感激。

谢谢!

解决方法

为正确的解决方案进行了编辑:

您需要将 Payload.$ 参数设置为 $。这会将整个 input 对象传递给 lambda。

{
  "Comment": "A pipeline!","StartAt": "Invoke Preprocessor","States": {
    "Invoke Preprocessor": {
      "Type": "Task","Resource": "arn:aws:states:::lambda:invoke","Parameters": {
        "FunctionName": "arn:aws:lambda:my-lambda-arn:$LATEST","Payload.$": "$"
      },"Next": "EndSM"
    },"EndSM": {
      "Type": "Pass","Result": "Ended","End": true
    }
  }
}
,

您可以做的另一件事是在参数中指定输入,这将允许您仅指定要传入的 json 的所有/某些部分。

{
  "Comment": "A pipeline!","InputPath": "$","input_event.$": "$.event"
      },"End": true
    }
  }
}

从代码的角度来看,您可以像这样引用它(python): input = event['input_event']