儲存路由的請求正文而不訪問 AWS 中的 Web 伺服器
假設我有一個網站:
mysite.com
在 AWS 上執行,由 Application Load Balancer 後面的一些 EC2 實例提供服務。負載均衡器通過 ACM 證書終止 SSL。我需要將傳入請求路由到
mysite.com/{user_id}/something/here/
遠離負載均衡器的 URL(例如:),而是將它們發送到 Lambda 函式(更具體地說,我只想擷取請求正文並將其寫入某處,然後返回 HTTP 200;它不必通過 Lambda 函式完成)。ALB 允許您路由到不同的目標組,但它們似乎只能包含 EC2 實例。文件聲明“您向目標組註冊目標,例如 EC2 實例” -如果不僅是 EC2 實例,還可以添加什麼*?*
我不想執行我自己的 haproxy 等實例,也不想在請求通過 ALB 並到達 Web 伺服器後通過 nginx 路由它們,因為這個練習的目的是減少我必須管理的事情,而不是增加他們!
有沒有解決的辦法?
您向目標組註冊目標,例如 EC2 實例。
http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html
你做了一個敏銳的觀察。這是一個有趣的措辭……但是,至少目前,EC2 實例是唯一的目標。
呼叫您的 Lambda 函式或將它們代理到 API Gateway(使用 Nginx 或 HAProxy)的 EC2 實例是一種合理的方法。如果您不熟悉將實例僅用作代理,您可能會驚訝於即使是很小的實例也可以推送多少流量,而代理就是他們所做的所有工作。(我有帶有 HAProxy 的 t2.micro 和 t2.nano 實例,它們每天代理超過 100 萬個請求,而 CPU 從未超過 5%)。
但是,如果您想減少必須管理的事情,將所有內容保留在一個域中,並選擇某些路徑,您可以在 ALB前面使用 CloudFront ,將某些路徑模式路由到其他地方——例如 API 網關。(獎勵:您也可以使用此解決方案將來自 S3 的靜態資產集成到您的站點中。您甚至可以通過路徑模式匹配將請求路由到 AWS 外部的伺服器和服務。)CloudFront 作為 CDN 進行行銷,但它也恰好是一個無限可擴展的反向代理。