How to rewrite paths in Amazon Application Load Balancer?
Current setup
Given the following ALB dns:
my-alb-dns.com
and the following containers running in ECS:
container-a
container-b
I configured it in a way that I can route traffic coming through the ALB via path rewriting to the respective service in my ECS cluster:
my-alb-dns.com:80/container-a/my/endpoint -> container-a:8080/my/endpoint
my-alb-dns.com:80/container-b/my/endpoint -> container-b:8080/my/endpoint
This works fine (by using an nginx) but I was asking myself, if using an additional nginx server is really neccessary to achieve path rewriting. Are there any plans to extend the ALB functionality by custom path-rewrite rules? So far I could not find anything about it in the documentation.
I also took a look at Lamda@Edge but it seems to me a little bit overkill to introduce CloudFront with Lamda just for simple rewriting (which as comparison takes in nginx 1 line of configuration).
Are there any best practices about this or should I keep hoping that AWS will implement it in the distant future and just stick with my current nginx solution?
Solution 1:
ALB doesn't support modifying requests, and I'm not aware of any plans to include such functionality. It's a huge can o' worms, so I'm not surprised AWS is leaving it alone for now. Stick with nginx (or an equivalent, such as haproxy), or modify your application to accept the /container-X
prefix in the request path.
Solution 2:
I use host based routing instead of path based routing in similar situations if your application can support it.
e.g.
service1.mydomain.com -> myalb.com -> tg1 -> container1:8000
service2.mydomain.com -> myalb.com -> tg2 -> container2:8001
Your application will call
service1.mydomain.com
instead of
mydomain.com/service1