【发布时间】:2021-01-16 09:33:27
【问题描述】:
我创建了一个运行 lambda 的基本状态机,然后使用该 lambda 的输出来决定选择。但是,我无法接收 lambda 函数的输出,因为它一直返回空有效负载。我尝试从 lambda 控制台单独运行 lambda,它运行良好(包括预期的回报)。但是,在 step 函数中,任务至少为 Payload 输出返回 null。
这是我的状态机的定义:
{
"StartAt": "ValidateWorkcellConfigTask",
"States": {
"ValidateWorkcellConfigTask": {
"Next": "ConfigValidationTypeChoiceState",
"Parameters": {
"FunctionName": "ValidateWorkcellConfig",
"InvocationType": "Event",
"Payload.$": "$"
},
"OutputPath": "$",
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"TimeoutSeconds": 15
},
"ConfigValidationTypeChoiceState": {
"Type": "Choice",
"Comment": "Forwards a VALID workflow config to the Provisioning Workflow or Relays the INVALID workflow config for logging",
"Choices": [
{
"Variable": "$.uuid",
"StringEquals": "SEA90-1",
"Next": "endState"
},
{
"Variable": "$.validConfig",
"StringEquals": "SEA90-1",
"Next": "SuccessRelayTask"
}
]
},
"endState": {
"Type": "Pass",
"End": true
},
"SuccessRelayTask": {
"End": true,
"Parameters": {
"FunctionName": "StatusRelayHandler",
"InvocationType": "Event",
"Payload.$": "$"
},
"OutputPath": "$",
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"ResultPath": "$",
"TimeoutSeconds": 15
}
}
}
这是 lambda 任务执行的输出:
{
"name": "ValidateWorkcellConfigTask",
"output": {
"Payload": null,
"SdkHttpMetadata": {
"AllHttpHeaders": {
"x-amzn-Remapped-Content-Length": [
"0"
],
"Connection": [
"keep-alive"
],
"x-amzn-RequestId": [
"4452a8d2-e607-4ae6-943c-9478b0f59ce0"
],
"Content-Length": [
"0"
],
"Date": [
"Sat, 16 Jan 2021 09:22:48 GMT"
],
"X-Amzn-Trace-Id": [
"root=1-6002b068-52fb3d1f60f20d3e10804f96;sampled=0"
]
},
"HttpHeaders": {
"Connection": "keep-alive",
"Content-Length": "0",
"Date": "Sat, 16 Jan 2021 09:22:48 GMT",
"x-amzn-Remapped-Content-Length": "0",
"x-amzn-RequestId": "4452a8d2-e607-4ae6-943c-9478b0f59ce0",
"X-Amzn-Trace-Id": "root=1-6002b068-52fb3d1f60f20d3e10804f96;sampled=0"
},
"HttpStatusCode": 202
},
"SdkResponseMetadata": {
"RequestId": "4452a8d2-e607-4ae6-943c-9478b0f59ce0"
},
"StatusCode": 202
},
"outputDetails": {
"truncated": false
}
}
注意负载是如何为空的……这导致下一个任务失败,因为它接收到一个空输入。我已经玩过 OutputPath、ResultPath 和 InputPath,但从来没有能够从 lambda 任务中返回一些东西。
lambda 本身是用 Java 编写的,并返回一个字符串。它实现了这个接口:
... implements RequestHandler<WorkcellConfig, String>
【问题讨论】:
-
状态机定义包含
"FunctionName": "ValidateWorkcellConfig"- 这也是你的真实配置吗?因为您应该在此处定义函数 ARN,而不仅仅是函数名称。 -
你能分享你的 lambda 代码吗?看起来您从第一次调用lumigo.io/blog/… 中没有返回任何内容,请在此处查看有关如何设置步进函数的教程
-
嗨,我也有同样的问题。您能分享一下您是如何解决这个问题的吗?
标签: aws-lambda aws-step-functions