使用 Lambda 代理集成的 Step Functions 和 Lambda

2024-03-06

我编写了一堆 Lambda 函数,这些函数通过 API Gateway 作为 Rest 端点公开。我选择了“Lambda 代理集成”,因为它似乎是一种简单的入门方法。

现在我想通过 AWS Step Functions 将其中 2 个函数链接在一起。除了如何为每个任务创建正确的输入之外,一般集成和配置工作正常。

使用控制台,我可以启动执行并给出以下 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 返回代码和响应等。

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

  • 使用 InputPath、ResultPath 和 OutputPath 我似乎只能使用上一步的“整个”输出作为输入或部分作为下一步的输入。但我不能只使用输出的一部分,在我的例子中是响应的元素“body”。
  • 无论如何,这个元素“body”都会被转义,所以我想我需要在将它用于下一个输入之前取消转义它?但如何呢?
  • 输入 JSON 需要包含“headers”、“body”或“queryParameters”等元素,这些元素根本不会出现在之前的输出中。我如何创建这些?

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


Step 函数被设计为直接与 lambda 集成,而不是通过 API 网关,这就是为什么 Step 函数不能自然地处理 Jain 转义的原因。

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

我希望这回答了你的问题。

Thanks

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Lambda 代理集成的 Step Functions 和 Lambda 的相关文章

随机推荐