【问题标题】:Aws StepFunction path with waitForTaskToken带有 waitForTaskToken 的 Aws StepFunction 路径
【发布时间】:2021-05-07 15:01:51
【问题描述】:

我无法将状态“PublishIotCmd&WaitTask”的输入路径转发到下一个任务“succedTask”。

state disgram picture

假设“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


【解决方案1】:

我认为您想将resultPath 传递给props 而不是payload

const publishIot = new tasks.LambdaInvoke(
  this, 
  'PublishIotCmd&WaitTask',
  {
    lambdaFunction: iotSendCommandFn,
    payload: sfn.TaskInput.fromObject({
      token: sfn.JsonPath.taskToken,
      request: sfn.JsonPath.entirePayload,     
    }),
    integrationPattern: sfn.IntegrationPattern.WAIT_FOR_TASK_TOKEN,
    timeout: Duration.minutes(TIMEOUT_WAIT_REPLY_SECONDS),
    resultPath: '$.lambda',
  }
);

【讨论】:

    【解决方案2】:

    @Marco,您不需要为PublishIotCmd&amp;WaitTask 指定输出路径。只需为succedTask 指定有效负载,如下所示

    "Payload": {
      "fuzzy":"foo",
      "taskresult.$": "$."
    }
    

    succedTask 的这种输入方式将是

    {
      "fuzzy":"foo",
      "taskresult": {"a":"b"}
    }
    

    【讨论】:

      猜你喜欢
      • 2021-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 2019-11-27
      • 2021-09-05
      • 2021-04-01
      相关资源
      最近更新 更多