我应该在无服务器应用程序中使用 Express.js 吗?

Should I be using Express.js in a Serverless app?

我想知道在无服务器应用程序 (AWS Lambdas) 中使用 Express.js 作为中间件是否是个好主意?我担心的是,在 Express.js 中有一个单功能设置,如果将来有大量请求,它将开始节流。我的顾虑是真的还是我犹豫不决

构建 mono-lambda 和 one-function-per-endpoint 之间的决定没有 crystal-clear 答案。

一方面,如果您使用的是云形成 - 每个堆栈只能使用 200 个资源,这会使 APIs 与 single-lambda-per-route 设计变得麻烦并迫使您失望堆栈拆分之类的事情的路径,它有效但在确实不应该这样做时增加了复杂性。此外,这使得共享代码变得更加困难,因为每个 lambda 函数都是其自己的部署包 - 因此您需要使用诸如 manually-included 共享目录、本地 NPM 模块或老式 copy-paste 之类的东西在您的函数之间共享逻辑。

另一方面,如果您选择将所有请求路由到 lambda,然后在您的函数中使用 express 来路由请求 - 您将面临管理一些 API Gateway 通常可以为您处理的复杂性(诸如请求模板验证、路由验证或 throttling/API 使用管理之类的东西)。

最终您可以通过任何一种方式构建成功的应用程序 - 因此您需要考虑的重要事项是:

  • 您考虑支持的 API 个端点的数量
  • 这些端点的域边界(它们是否非常相似,有很多共享代码?或者非常独特并且整齐地绑定到它们自己的服务中)
  • 需要 APIGW 功能,例如节流和请求验证
  • 使用或不使用 express 等框架的开发人员的舒适度。

我认为: Express 启动一个 http 服务器,但是 Serverless(azure 函数,lambda,...)是一个基于简单脚本的 http 服务器,所以...为什么要启动“另一个”http 服务器?

Serverless 是一个很棒的框架,因此您不需要任何其他东西就可以工作...

同样的问题适用于 Loopbak、Fastify、Http/s、Hapi、...

关于路线: https://aws.amazon.com/blogs/aws/api-gateway-update-new-features-simplify-api-development/