node.js - Nestjs 在 lambda 函数上运行而不创建实际的服务器来与 AWS API Gateway 结合?
问题描述
我有 5 个用NestJS编写的 HTTP 微服务。我必须将它们转换为lambda 函数,其中每个服务都有自己的 lambda 函数。这样做的目的是让我的服务完全转向无服务器。
我正在使用API Gateway通过给定的请求路径将请求映射到正确的 lambda。
现在从头开始创建一个 MVC 模式,它接收 URL 路径并解析所需的控制器和函数(包括 url 参数等),这是 express 和 nestjs 已经完成的事情。
有没有办法在没有实际服务器监听的情况下实现 nesstjs 的抽象功能?所以我可以简单地通过nestjs URI 和请求数据,它会工作吗?
在 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 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!
推荐阅读
- reactjs - document.createElement('div') 在 React 构造函数中静默失败
- amazon-web-services - 只授予一个 EC2 实例权限?
- python - 用于添加具有特定角色的用户的 Flask-Admin 权限
- python - 如何将熊猫数据框字符串条目拆分为单独的行?
- sql-server - 消息 102,级别 15,状态 1,过程 SP_Get_ZINTLL,第 36 行 ',' 附近的语法不正确
- git - VSTS 和 Bitbucket 集成
- python - 是否需要在单元测试用例中更改数据库 - python django
- electron - 无法在电子生成器上设置图标
- cassandra - OpsCenter 数据备份和还原问题
- php - POST 请求后 403 Forbidden - PHP, Slim