【发布时间】:2021-05-07 15:01:51
【问题描述】:
我无法将状态“PublishIotCmd&WaitTask”的输入路径转发到下一个任务“succedTask”。
假设“PublishIotCmd&WaitTask”的输入路径是{“fuzzy”:“foo”}。
“PublishIotCmd&WaitTask”是从外部的lamba中唤醒的,我们来模拟一下:
aws stepfunctions send-task-success --task-token <the_token>--task-output {\"a\":\"b\"},
我期望“succedTask”的输入路径是:
{
"fuzzy":"foo"
"taskresult": {"a":"b"}
}
这是任务定义:
"PublishIotCmd&WaitTask": {
"Type": "Task",
"TimeoutSeconds": 600,
"Resource": "arn:aws:states:::lambda:invoke.waitForTaskToken",
"Parameters": {
"FunctionName": "XXX",
"Payload": {
"token.$": "$$.Task.Token",
"request.$": "$",
"resultPath": "$.taskresult"
}
}
}
此状态定义由以下 cdk 代码生成:
const publishIot = new tasks.LambdaInvoke(this, 'PublishIotCmd&WaitTask', {
lambdaFunction: iotSendCommandFn,
payload: sfn.TaskInput.fromObject({
token: sfn.JsonPath.taskToken,
request: sfn.JsonPath.entirePayload,
resultPath: '$.lambda',
}),
integrationPattern: sfn.IntegrationPattern.WAIT_FOR_TASK_TOKEN,
timeout: Duration.minutes(TIMEOUT_WAIT_REPLY_SECONDS),
});
@Anton 的建议: “或者将输入作为 PublishIotCmd 的输出传递。”:我猜你的意思是这样的:
"Payload": {
"token.$": "$$.Task.Token",
"request.$": "$",
"resultPath": "$.lambda",
"outputPath": "$"
}
但这仍然不起作用,我只得到 {"a":"b"}
【问题讨论】:
-
您想将 PublishIotCmd 的输入传递给 succedTask 的输入吗?然后使用执行上下文(参见docs.aws.amazon.com/step-functions/latest/dg/…)。或者将输入作为 PublishIotCmd 的输出传递。
-
@Anton 我已经更新了你的建议,但仍然没有运气。
-
@MarcoSinigaglia 你能支持答案还是接受解决方案?
标签: aws-cdk aws-step-functions