【问题标题】:Is it possible to use AWS lambda for routing traffic from ELB to S3 bucket?是否可以使用 AWS lambda 将流量从 ELB 路由到 S3 存储桶?
【发布时间】:2020-05-21 16:32:10
【问题描述】:

服务于 3 个 web 应用程序的当前 AWS 配置 -

这里 ELB 负责 SSL 卸载。目前 Node JS 应用程序部署在 EC2 机器上。它负责处理后端 API 并为 3 个 SPA react webapps 提供静态文件。

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

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

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

lambda 函数还必须根据规则路由流量 -

  • /api/* --> 将流量路由到node js app
  • /ui/site1/* --> 将流量路由到 S3 存储桶 site1 目录
  • /ui/site2/* --> 将流量路由到 S3 存储桶 site2 目录
  • /ui/site3/* --> 将流量路由到 S3 存储桶 site3 目录

    1. 我们可以在 lambda 函数中编写这样的规则吗?

【问题讨论】:

  • 我肯定会为此使用 Cloudfront。它不仅可以满足您的需求,还可以降低您的 S3 带宽成本。
  • 您说您希望对此进行改进。您具体在寻找哪些改进?只是从您的 Web 服务器卸载静态资产的交付?您是否考虑过诸如 varnish 之类的 HTTP 缓存?
  • @jarmod 我不建议将清漆放在 S3 前面。这确实违背了 S3 IMO 的目的。
  • @jordanm 同意,但我指的是缓存来自源 Web 服务器的 HTTP 内容。资产尚未在 S3 中,因此此时不建议迁移到 S3。当然,S3/CloudFront 将是典型的推荐,但我提供了一个替代方案,因为我希望避免使用 CloudFront。
  • @jordanm Cloudfront 会将我的应用程序公开吗?还是我仍然可以将其设为私有?使用 cloudfront,我需要为每个 webapps 创建 seaparte 分发。

标签: amazon-web-services amazon-s3 aws-lambda


【解决方案1】:

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

但是

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

而且您将为检索到的每个文件支付 Lambda 调用费用,这无疑是很小的。

您将增加检索每个文件的时间,这会降低您的网络应用程序的速度。多少取决于您加载了多少静态资源。

如果您想拆分静态和动态内容并且不想使用 CloudFront,更好的解决方案是在不同的端口上启动另一个 Node.JS 服务器,并将 ALB 指向它。

【讨论】:

  • 我不想使用云端的唯一原因是我必须为每个站点创建单独的分发,并在 ELB 处理这些分发的路由规则。这些也是内部私人网站。没有必要将它们公开。不确定在使用云前端时是否可以将网站设为私有。
  • @NithinKumarBiliya - 所以使用我推荐的解决方案并在同一个 EC2 实例上启动另一个 Node 实例,以提供静态内容。
  • 这些网站都是微应用。将频繁添加新的微应用程序。每次有一个新的应用程序时,都必须有人对节点代码进行更改。希望避免这种开销。
  • 这些网站都是微应用。将频繁添加新的微应用程序。每次有一个新的应用程序时,都必须有人对节点代码进行更改。希望避免这种开销。
【解决方案2】:

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

所以

  • /api/* --> 目标组,后面运行着 NodeJS 应用程序
  • /ui/site* --> lambda,与 S3 对象的内容相呼应

【讨论】:

  • 你能指导我使用 nodejs lambda 代码来回显 s3 的内容吗?
猜你喜欢
  • 1970-01-01
  • 2018-01-04
  • 1970-01-01
  • 2017-04-24
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
相关资源
最近更新 更多