使用 aws lambda 作为节点网络服务器

使用 aws lambda 作为节点网络服务器

我听说有人使用 AWS lambdas 来运行 node express web 服务器,在我看来这是一个糟糕的想法,原因如下:

  • 很难在本地以类似的状态运行它们
  • 这不是他们的预期用途
  • 冷启动是个问题
  • 发布代码很烦人
  • 您无法上传文件
  • 你不能把 nginx 或反向代理放在它前面
  • 所有 Web 服务器代码配置均通过代码完成

我愿意承认我在这一点上是错的:)。

我说的是关键任务网站,而不是博客或其他东西。

我是对的还是 aws lamdas 是放置节点服务器的可靠位置。

答案1

您似乎忽略了一点,这种安排实际上并没有在 Lambda 中运行 Web 服务器——这甚至是不可能的,因为 Lambda 函数没有守护进程模式。

当前未处理函数调用的 Lambda 容器处于暂停状态,被拒绝访问底层 CPU。它无法侦听套接字。

Web 服务器是 AWS API 网关或应用程序负载均衡器,它们都接受查看器请求并使用其有效负载来调用 Lambda 函数。不需要 Nginx,但从技术上讲,您仍然可以使用它,只是毫无意义……但 CloudFront 是一个很好的无服务器反向代理,它可以将请求发送/assets/*到 S3 存储桶,同时将其他所有内容发送到 API 网关后面的应用程序。

因此,认为这不是预期目的的说法似乎是基于对所涉及内容的误解。

此外,AWS 有一个专门用于此目的的官方库。

使用现有的 Node.js 应用程序框架在 AWS Lambda 和 Amazon API Gateway 上运行无服务器应用程序和 REST API

https://github.com/awslabs/aws-serverless-express

...所以这是一个非常有效的用例现存的应用程序,至少。

对于新应用程序,包含框架更具争议性,因为它是一层并非绝对必要的开销,但如果你省略框架,其余的架构就不会改变——你可以在 Node.js 中基于 Lambda 函数构建一个完整的网站,而无需 Express,而且设置基本相同。Web 服务器是 API 网关或 ALB,或者如果你使用 Lambda@Edge 来处理 JS 或 Python 代码,则可以简单地使用 CloudFront。

相关内容