4

我有一个使用vendia serverless-express作为处理程序的 lambda 设置。从具有多个路由的单个 lambda 函数提供 REST API 一直运行良好。

我现在有一个新要求,其中相同的 lambda 需要成为阶跃函数状态机的一部分。但是 vendia 应用程序似乎不允许这样做,因为它总是抛出错误:“无法根据事件确定事件源”,因为它预计事件仅是 api gateway / alb。

因此,基于此,看起来我需要一个单独的 lambda 用于 step,这使我在多个 lambda 中有重复的代码。

lambda 是否可以处理来自 step 的输入并且仍然是 vendia express 应用程序?如果我正在尝试一些根本没有意义的事情,请告诉我。

4

1 回答 1

0

如果我是你,我会实现我自己的转换器,将 StepFunction 事件转换为 API Gateway 事件,然后在你的 lambda 中调用 express-serverless。

该包aws-lambda在 TypeScript 中包含许多 AWS 事件的定义,包括那些事件,然后尝试从您自己的步进函数事件值生成模拟 API Gateway 事件。从来源(4.3.9)我们有功能:

function getEventSourceNameBasedOnEvent ({
  event
}) {
  if (event.requestContext && event.requestContext.elb) return 'AWS_ALB'
  if (event.Records) return 'AWS_LAMBDA_EDGE'
  if (event.requestContext) {
    return event.version === '2.0' ? 'AWS_API_GATEWAY_V2' : 'AWS_API_GATEWAY_V1'
  }

  throw new Error('Unable to determine event source based on event.')
}

所以可能要让它正常工作,你必须在你的模拟事件中定义一个 RequestContext 模拟值,这应该足够了。

于 2021-08-12T12:02:23.417 回答