如何解决状态机将不接受输入路径
我敢肯定有人会告诉我一个即时的解决方案,但我已经在这个问题上呆了几个小时了,所以我只是想问一下。
我无法让状态机接受初始输入。目的是设置一个指向状态机的 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']
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。