在 AWS 中存储路由请求正文而不访问 Web 服务器

在 AWS 中存储路由请求正文而不访问 Web 服务器

假设我有一个网站:mysite.com,在 AWS 上运行,由应用程序负载均衡器后面的一些 EC2 实例提供服务。负载均衡器通过 ACM 证书终止 SSL。

我需要将传入的请求路由到mysite.com/{user_id}/something/here/远离负载均衡器的 URL(例如:),而是将它们发送到 Lambda 函数(更具体地说,我只想捕获请求正文并将其写入某处,然后返回 HTTP 200;它不必通过 Lambda 函数完成)。

ALB 允许您路由到不同的目标组,但它们似乎只能包含 EC2 实例。文档指出“您向目标组注册目标,例如 EC2 实例” - 什么别的如果不仅仅是 EC2 实例,还可以添加吗?

我不想运行自己的 haproxy 等实例,也不想在请求通过 ALB 并到达 Web 服务器后通过 nginx 路由它们,因为这个练习的目的是减少我必须管理的事情,而不是增加它们!

有没有解决的办法?

答案1

您可以将目标(例如 EC2 实例)注册到目标组。

http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html

您的观察非常敏锐。措辞很有意思……但至少目前,EC2 实例是唯一的目标。

EC2 实例要么调用您的 Lambda 函数,要么将它们代理到 API 网关(使用 Nginx 或 HAProxy),这是一种合理的方法。如果您不熟悉将实例仅用作代理,那么您可能会惊讶于当代理是它们所做的全部工作时,即使是很小的实例也可以通过它推送多少流量。(我有 t2.micro 和 t2.nano 实例,它们使用 HAProxy,每天代理超过 100 万个请求,而 CPU 使用率从未超过 5%)。

但是,如果你想减少需要管理的东西,把所有东西都放在一个域中,并挑选出某些路径,那么你可以使用 CloudFront在...前面ALB,将某些路径模式路由到其他地方——例如 API 网关。(额外好处:您还可以使用此解决方案将 S3 中的静态资产集成到您的站点中。您甚至可以通过路径模式匹配将请求路由到 AWS 外部的服务器和服务。)CloudFront 作为 CDN 进行营销,但它也恰好是一个可无限扩展的反向代理。

相关内容