跨不同 Elastic Beanstalk 应用程序的负载均衡
Load balancing across different Elastic Beanstalk applications
在我的 AWS 环境中有一些负载均衡/自动缩放的 Elastic Beanstalk 应用程序。
我想在他们前面有一个负载均衡器,所以任何请求 http://loadbalancer.com/app1 is routed to the first Elastic Beanstalk app, http://loadbalancer.com/app2 到第二个等等。
我尝试设置一个应用程序负载均衡器,将不同的侦听器路由到不同的目标组。
不幸的是,我的解决方案并不理想,因为目标组绑定到一组固定的 EC2 实例,而我希望它们与按需创建或销毁实例的环境关联
我还没有找到将应用程序负载均衡器的侦听器绑定到自动缩放组的方法。
有没有办法实现我想要的?
我刚刚按照本文中的说明成功做到了
https://aws.amazon.com/blogs/devops/introducing-application-load-balancer-unlocking-and-optimizing-architectures/
步骤:
1) 创建一个新的目标组
aws elbv2 create-target-group --name <target_group_name> --protocol HTTP --port 80 --vpc-id <vpc_id>
2) 将您的目标组绑定到与应用关联的自动缩放组
aws autoscaling attach-load-balancer-target-groups --auto-scaling-group-name <id_of_the_autoscaling_group> --target-group-arns "<new_target_group_arns>"
3) 在主应用程序负载均衡器中创建一个新规则,将所需路径路由到正确的应用程序(这可以通过 UI 完成)。
我在应用程序负载均衡器和弹性 beantalk 的控制台中实现的方法如下
- 创建新目标组 (TG-App1)
- 将 TG-App1 附加到您的 beantalk 环境自动缩放组。现在,您将同时拥有 beantalk 创建的目标组和附加的 TG-App1,两者现在都将随实例一起更新。
- 创建新的应用程序负载均衡器 (ALB-App)
- 创建转发到 TG-App1 的 ALB-App 规则(例如:PATH:/app1/* -> FORWARD:TG-App1)
- 更新 beantalk 环境实例安全组以允许来自端口 80 上的 ALB-App 安全组的流量。(您现在将有 2 个端口 80 规则,1 个用于 ALB-App,1 个用于默认 beantalk 负载均衡器安全组)
这允许您在 ALB-App ("loadbalancer.com") 上设置 dns 并根据规则将流量转发到具有由不同 beantalks 管理的实例的不同目标组。只需按照步骤为每个 beantalk 环境创建一个目标组并将其添加到 ALB-App
上的规则中即可
结果:
"loadbalancer.com/app1" -> ALB-App -> TG-App1 -> Beanstalk 环境 1 个实例
"loadbalancer.com/app2" -> ALB-App -> TG-App2 -> Beanstalk 环境 2 个实例
Amazon Elastic Beanstalk 现在支持共享负载均衡器
11 - 2020 年 9 月
在我的 AWS 环境中有一些负载均衡/自动缩放的 Elastic Beanstalk 应用程序。
我想在他们前面有一个负载均衡器,所以任何请求 http://loadbalancer.com/app1 is routed to the first Elastic Beanstalk app, http://loadbalancer.com/app2 到第二个等等。
我尝试设置一个应用程序负载均衡器,将不同的侦听器路由到不同的目标组。 不幸的是,我的解决方案并不理想,因为目标组绑定到一组固定的 EC2 实例,而我希望它们与按需创建或销毁实例的环境关联
我还没有找到将应用程序负载均衡器的侦听器绑定到自动缩放组的方法。
有没有办法实现我想要的?
我刚刚按照本文中的说明成功做到了 https://aws.amazon.com/blogs/devops/introducing-application-load-balancer-unlocking-and-optimizing-architectures/
步骤:
1) 创建一个新的目标组
aws elbv2 create-target-group --name <target_group_name> --protocol HTTP --port 80 --vpc-id <vpc_id>
2) 将您的目标组绑定到与应用关联的自动缩放组
aws autoscaling attach-load-balancer-target-groups --auto-scaling-group-name <id_of_the_autoscaling_group> --target-group-arns "<new_target_group_arns>"
3) 在主应用程序负载均衡器中创建一个新规则,将所需路径路由到正确的应用程序(这可以通过 UI 完成)。
我在应用程序负载均衡器和弹性 beantalk 的控制台中实现的方法如下
- 创建新目标组 (TG-App1)
- 将 TG-App1 附加到您的 beantalk 环境自动缩放组。现在,您将同时拥有 beantalk 创建的目标组和附加的 TG-App1,两者现在都将随实例一起更新。
- 创建新的应用程序负载均衡器 (ALB-App)
- 创建转发到 TG-App1 的 ALB-App 规则(例如:PATH:/app1/* -> FORWARD:TG-App1)
- 更新 beantalk 环境实例安全组以允许来自端口 80 上的 ALB-App 安全组的流量。(您现在将有 2 个端口 80 规则,1 个用于 ALB-App,1 个用于默认 beantalk 负载均衡器安全组)
这允许您在 ALB-App ("loadbalancer.com") 上设置 dns 并根据规则将流量转发到具有由不同 beantalks 管理的实例的不同目标组。只需按照步骤为每个 beantalk 环境创建一个目标组并将其添加到 ALB-App
上的规则中即可结果:
"loadbalancer.com/app1" -> ALB-App -> TG-App1 -> Beanstalk 环境 1 个实例
"loadbalancer.com/app2" -> ALB-App -> TG-App2 -> Beanstalk 环境 2 个实例
Amazon Elastic Beanstalk 现在支持共享负载均衡器
11 - 2020 年 9 月