繁体   English   中英

Nestjs 在 lambda 函数上运行而不创建与 AWS API Gateway 结合的实际服务器?

[英]Nestjs run on lambda function without creating an actual server to combine with AWS API Gateway?

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

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

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

有没有办法在没有实际服务器监听的情况下实现 nesstjs 的抽象功能? 所以我可以简单地将 URI 传递给 nestjs 并请求数据,它会处理它吗?

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

在研究了网络并查看了这些出色的答案后,我想到了将这些信息收集在一起并带来更详细的内容,这些内容是我从这些文章描述的和我发现的文章中误解的内容。

如何使用 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 网关服务中创建您的端点(如果您使用 AWS 作为提供者)。 API Gateway 是 AWS 提供的一项服务,可让您将请求映射到 AWS 的其他服务,例如 lambda 函数。

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

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

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

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

您必须提供有关您的架构的更多信息。 您是否将Blueprintmicroservice 然后选择microservice-http-endpoint

看一下 [microservice-http-endpoint] 示例。 1

您可以在 lambda 函数中转换整个 express 应用程序,并在请求传入时对其进行处理。

这个博客展示了如何为 express 做到这一点: https : //serverless.com/blog/serverless-express-rest-api/

NestJS 也可以尝试类似的事情。 所以 lambda 函数基本上是一段在请求进入时执行的代码。代码的大小和执行特定于平台的作业的时间都有限制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM