是否可以使用AWS Lambda将流量从ELB路由到S3存储桶?

问题描述 投票:0回答:2

正在提供3个Web应用程序的当前AWS配置:

enter image description here

这里ELB正在处理SSL卸载。当前,Node JS应用程序已部署在EC2计算机上。它负责处理后端API以及为3个SPA react Webapp提供静态文件。

我们希望通过分离前端和后端来对此进行改进。我们正在考虑将3个SPA react Webapp移至单个S3存储桶中。每个人都将坐在此S3存储桶上的自己的目录中。 S3存储桶将配置为静态网站托管。我们仍将具有用于服务后端API的节点JS实例。

enter image description here

我们希望避免使用云前端将流量从ELB路由到S3,因为它们是内部Web应用程序,来自特定区域的用户数量有限。

  1. 我们能否使用lambda函数将流量从ELB路由到EC2上的Node JS应用,以及从ELB到S3存储桶?如果可能的话,采用这种方法在性能和成本方面都是一种好的做法吗?

而且lambda函数还必须根据规则来路由流量:

  • / api / *->将流量路由到节点js应用
  • / ui / site1 / *->将流量路由到S3存储桶site1文件夹
  • / ui / site2 / *->将流量路由到S3存储桶site2文件夹
  • / ui / site3 / *->将流量路由到S3存储桶site3文件夹

    1. 我们可以在lambda函数中编写这样的规则吗?
amazon-web-services amazon-s3 aws-lambda
2个回答
1
投票

是的,您可以实现Lambda来从S3检索内容。您只需要从调用事件中提取请求路径,将其转换为您正在使用的任何S3位置,检索文件,并将其打包在响应中即可。

BUT

您只能使用1MB的响应数据,因此,如果您有任何图像或其他大文件,将无法提供它们(doc)。

并且您将为检索到的每个文件支付Lambda调用成本,这肯定很小。

而且您将增加检索每个文件的时间,这将降低您的网络应用的速度。多少取决于您要加载的静态资产。

一个更好的解决方案,如果您想拆分静态和动态内容,并且不想使用CloudFront,则可以在另一个端口上启动另一个Node.JS服务器,并在其上设置ALB位置。


0
投票

应用程序负载平衡器已经支持path based routing。但是不支持将S3存储桶作为有效目标,因此您需要一个Lambda来回显内容。

所以

  • / api / *->目标组,后面运行NodeJS应用程序
  • / ui / site *-> lambda,回显S3对象的内容
© www.soinside.com 2019 - 2024. All rights reserved.