amazon-web-services - 是否可以使用 AWS lambda 将流量从 ELB 路由到 S3 存储桶?
问题描述
服务于 3 个 webapps 的当前 AWS 配置 -
这里 ELB 负责 SSL 卸载。目前 Node JS 应用程序部署在 EC2 机器上。它负责处理后端 API 以及为 3 个 SPA react webapps 提供静态文件。
我们希望通过分离前端和后端来改进这一点。我们正在考虑将 3 个 SPA react webapps 移动到单个 S3 存储桶中。每个都将位于此 S3 存储桶上自己的目录中。S3 存储桶将配置为静态网站托管。我们仍将拥有用于服务后端 API 的节点 JS 实例。
我们希望避免使用云端将流量从 ELB 路由到 S3,因为这些是内部 web 应用程序,来自特定区域的用户数量有限。
- 我们可以使用 lambda 函数将流量从 ELB 路由到 EC2 上的 Node JS 应用程序以及从 ELB 到 S3 存储桶吗?如果可能的话,采用这种方法在性能方面和成本方面是一种好的做法吗?
此外,lambda 函数必须根据规则路由流量 -
- /api/* --> 将流量路由到节点 js 应用程序
- /ui/site1/* --> 将流量路由到 S3 存储桶 site1 目录
- /ui/site2/* --> 将流量路由到 S3 存储桶 site2 目录
/ui/site3/* --> 将流量路由到 S3 存储桶 site3 目录
- 我们可以在 lambda 函数中编写这样的规则吗?
解决方案
是的,您可以实现从 S3 检索内容的 Lambda。您只需从调用事件中提取请求路径,将其转换为您正在使用的任何 S3 位置,检索文件并将其打包到响应中。
但
您的响应数据限制为 1MB,因此如果您有任何图像或其他大文件,您将无法提供它们 ( doc )。
而且您将为检索到的每个文件支付 Lambda 调用费用,这无疑是很小的。
而且您将增加检索每个文件的时间,这会降低您的网络应用程序的速度。多少取决于您正在加载多少静态资产。
如果您想拆分静态和动态内容并且不想使用 CloudFront,更好的解决方案是在不同的端口上启动另一个 Node.JS 服务器,并将 ALB 指向它。
推荐阅读
- swift - clang(objective-C)模块和 Swift 模块有什么区别?
- next.js - 如何在下一个 js 中进行 jwt 身份验证
- hive - Hive 在遇到 \N 后跳过记录
- elasticsearch - ElasticSearch如何通过where条件进行分组
- sql - Pl/pgSQL 匿名代码块在 [42601] 错误上失败:查询没有结果数据的目的地
- c++ - MPI_ERR_TRUNCATE 与 Boost.MPI 并且仅阻塞通信
- javascript - 使用纯js更改复选框状态时如何获取属性中的值?
- vue.js - 为什么我的 AWS-Amplify 注册请求不包含某些参数?
- python - 如何检查熊猫数据框中是否有重复的样本?
- r - R cut - 标签具有前瞻偏差