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