首页 > 解决方案 > Nestjs 在 lambda 函数上运行而不创建实际的服务器来与 AWS API Gateway 结合?

问题描述

我有 5 个用NestJS编写的 HTTP 微服务。我必须将它们转换为lambda 函数,其中每个服务都有自己的 lambda 函数。这样做的目的是让我的服务完全转向无服务器。

我正在使用API Gateway通过给定的请求路径将请求映射到正确的 lambda。

现在从头开始创建一个 MVC 模式,它接收 URL 路径并解析所需的控制器和函数(包括 url 参数等),这是 express 和 nestjs 已经完成的事情。

有没有办法在没有实际服务器监听的情况下实现 nesstjs 的抽象功能?所以我可以简单地通过nestjs URI 和请求数据,它会工作吗?

在 lambda 上运行 MVC 无服务器进程的任何其他解决方案?

标签: node.jsamazon-web-serviceshttpmodel-view-controllernestjs

解决方案


在研究了网络并查看了这些很棒的答案之后,我想把这些信息收集在一起,并带来一些更详细的东西,这些东西是我从这些文章描述的和我发现的那些文章中误解的。

如何使用 Lambda 函数 AWS 提供商创建无服务器 NestJS 应用程序

我们来看看这篇存储库文章:https ://github.com/rdlabo/serverless-nestjs

多亏了他,他基本上打包了一个配置了Serverless 框架的现成 NestJS 项目。

我没有足够的经验来谈论无服务器框架,但我可以解释它在我们的案例中是如何工作的。

首先,有serverless.yml一篇关于 github 存储库文章的解释,基本上在这里你描述了你的 lambda 函数的名称,在包中排除什么以及触发 http 事件。

functions:
  index:
    handler: dist/index.handler
    
    events:
    - http:
        cors: true
        path: '/'
        method: any
    - http:
        cors: true
        path: '{proxy+}'
        method: any

如果我们看一下这个 yml 文件,您可以看到我们有 2 个 HTTP 事件,一个用于根路径,一个用于代理路径。

我在阅读时问自己的一个问题,那么这个事件部分是做什么的?

这部分 yml 基本上在 AWS 的API Gateway服务中创建您的端点(如果您使用 AWS 作为提供者)。API Gateway 是 AWS 提供的一项服务,可让您将请求映射到 AWS 的其他服务,例如 lambda 函数。

当您sls deploy 在输入凭据后运行命令时,使用sls config credentials无服务器框架将创建或修改是否存在基于您设置的配置的新 lambda 函数,并设置链接到该 lambda 的 API Gateway 端点。

部署后,您将收到一个激活该 lambda 的链接。我使用的示例基本上使用了某人创建的快速无服务器解决方案,基本上是一个代理代码,它知道如何接收 API Gateway 请求对象并将其转换为表达和激活它,而无需运行服务器。

注意:Serverless 正在使用 CloudFormation 创建堆栈以上传和部署 lambda 函数,我认为通过这种方式您可以上传超过 250mb 的解压缩文件,因为我的项目目前是 450mb 的解压缩文件,我对此不确定,但是当我尝试上传更大的 zip,我的 lambda 开始溢出,就像说它缺少一些模块一样,我猜是因为大小。

或者也许 serverless 真的优化了模块,所以上传的包比你期望的要小得多。如果有人知道这一点,+1!


推荐阅读