使用Lambda代理集成对Lambda进行步进功能

时间:2018-09-17 19:52:14

标签: aws-lambda aws-api-gateway aws-step-functions

我编写了许多Lambda函数,这些函数通过API网关公开为Rest端点。我选择了“ Lambda代理集成”,因为它似乎是一种入门的直接方法。

现在,我想通过AWS Step Functions将其中两个功能链接在一起。除了如何为每个任务创建适当的输入之外,常规的集成和配置都可以正常工作。

使用控制台,我可以启动执行并提供以下JSON:

{
    "headers": {
        "Authorization": "Bearer 12345"
    },
    "body": "\"some\": \"json\"",
    "queryParameters: {
        "more": "here"
    }
}

这是我Lambda函数输入的样子,因为我在各处都使用Lambda代理集成。

输出看起来像这样:

{
  "isBase64Encoded": false,
  "statusCode": 200,
  "headers": {
    "Access-Control-Allow-Origin": "*"
  },
  "body": "{\"message\":\"Great\"}"
}

这也是很好的独立工具,API网关将这些信息映射回正确的HTTP返回代码和响应以及所有信息。

现在:使用“步函数”时如何创建这些输入JSON。当然,使用控制台很容易就可以进行第一个输入。但是,如何创建下一个输入并混入上一个输出的一部分?要点中的一些问题:

  • 使用InputPath,ResultPath和OutputPath我似乎只能将上一步的“整个”输出用作输入,或者将一部分用作下一步的输入。但是我不能仅使用输出的一部分,就我而言,是响应的元素“ body”。
  • 无论如何,此元素“ body”都已转义,所以我想在以某种方式将其用于下一个输入之前需要取消转义吗?但是如何?
  • 输入JSON需要包含诸如“标头”,“正文”或“ queryParameters”之类的元素,而这些元素根本不会出现在上一个输出中。如何创建这些内容?

我想知道Step Functions是否真的不能与为Lambda代理集成构建的Lambda一起使用。是这样吗人们如何在不遇到这些问题的情况下使用步进功能?

1 个答案:

答案 0 :(得分:0)

Step函数被设计为直接与lambda集成,而不是通过api网关集成,这就是Step函数不能处理它的原因,这是Jain自然逃脱的原因。

如果您想同时通过api网关和step函数访问lambda代码,我建议您执行以下操作: 将lambda代码逻辑分为两部分,即核心逻辑和核心逻辑的包装程序,它们基本上执行从主体中提取字段并对其进行转义的功能。这样,您的api网关可以调用包装器lambda,而step函数可以调用核心逻辑lambda。通过这种设计,您将能够实现自己的目标。此外,您可以将lambda定义为一个cfn和代码包的一部分,这将有助于轻松维护。

我希望这能回答您的问题。

谢谢