首页 > 解决方案 > AWS Stepfunction 将数据传递给下一个 lambda,而无需所有额外的填充

问题描述

我用 AWD CDK(打字稿)创建了一个状态机,一切正常。它只是 Lambda 1 的输出,它是 Lambda 2 的输入,具有某种我不感兴趣的状态机填充。

状态机定义:

{
  "StartAt": "",
  "States": {
    "...applicationPdf": {
      "Next": "...setApplicationProcessed",
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Parameters": {
        "FunctionName": "...applicationPdf",
        "Payload.$": "$"
      }
    },
    "...setApplicationProcessed": {
      "Next": "Done",
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "Parameters": {
        "...applicationPdf",
        "Payload.$": "$"
      }
    },
    "Done": {
      "Type": "Succeed"
    }
  }
}

Lambda1 的输出(applicationPdf):

{
  "ExecutedVersion": "$LATEST",
  "Payload": {
    ...
  },
  "SdkHttpMetadata": {
    "AllHttpHeaders": {
      ...
    },
    "HttpHeaders": {
       ....
    },
    "HttpStatusCode": 200
  },
  "SdkResponseMetadata": {
     ....
  },
  "StatusCode": 200
}

所以我只对Payload,而不是所有其他的东西感兴趣。我想做的原因是我想单独运行第二个 lambda 我只想让事件进入 Lambda,成为 Payload 对象,而不是带有ExecutedVersion etc.

有谁知道如何做到这一点?我会看看Parameters定义的选项,也许答案就在那里。

标签: aws-lambdaaws-step-functions

解决方案


感谢您提出问题并感谢您对 Step Functions 的兴趣。

ResultSelectorOutputPath字段可用于操作状态的输出,这在状态输出不需要在后续状态中访问的值时特别有用。它们之间的区别在于 ResultSelector 在应用状态的 ResultPath 之前应用,而 OutputPath 应用在它之后。

如您所述,您可以使用 OutputPath 过滤掉任何不需要的元数据,然后再传递到下一个状态。


推荐阅读