具有多个负载均衡器的AWS Elastic Beanstalk环境

时间:2014-01-21 19:43:12

标签: amazon-web-services ssl amazon-ec2 load-balancing amazon-elastic-beanstalk

我有以下情况: 我有1个Rails应用程序,它有2个域,每个域都有多个/动态子域。 此应用程序在AWS中使用负载平衡的Elastic Beanstalk。

我需要的是那些指向我的单个Rails应用程序的2个域在端口443中的SSL下工作。

但是由于Elastic Beanstalk只有一个负载均衡器,我只能在端口433上使用一个SSL证书:( 使用UCC SSL证书不是解决方案,因为我需要每个域证书都是通配符,因此动态子域也可以工作。

有关如何让多个Load Balancers与Elastic Beanstalk环境很好地协作的任何想法?

最佳。

5 个答案:

答案 0 :(得分:23)

要将多个Elastic Load Balancers(ELB)添加到Elastic Beanstalk(EB)应用程序,您需要将其他ELB添加到EB应用程序的自动缩放组。

在命令行

实现这一目标的最简单方法是通过AWS CLI(https://aws.amazon.com/cli/):

aws autoscaling attach-load-balancers --auto-scaling-group-name <SG_NAME> --load-balancer-names <ELB_NAME>

在AWS控制台

当然,这也可以在AWS控制台中完成:

  1. 转到 EC2 &gt; Auto Scaling &gt; Auto Scaling Groups
  2. 选择要将elb添加到
  3. 的组
  4. 选择详细信息标签
  5. 右上角的编辑按钮
  6. 使用“负载均衡器”字段中的“自动完成”添加负载均衡器
  7. 保存
  8. 为了您的方便,您可以看到您需要点击所有5个步骤的位置(不要忘记保存!) clickpath_image

    对我来说,这也适用于eb生成的自动缩放组(Region:eu-central-1)。

    在问题发布时可能尚未提供,但现在是。

答案 1 :(得分:6)

使用Elastic Beanstalk是一个艰难的选择,因为他们有一个cookie切割方式来部署你的应用程序,如果它不在他们的选项中,那么你要么“破解它”,要么只是使用EC2或纯云服务器使用完全不同的解决方案。

您可以尝试的另一件事是使用第二个域(和子域)的证书创建另一个ELB,并将其指向您的Elastic Beanstalk实例。如果你去ELB控制台,你应该能够看到第一个域的ELB。然后,您可以根据第一个域创建第二个域。

希望它有所帮助。

答案 2 :(得分:0)

我认为针对您的问题的最佳解决方案是在同一SSL证书上拥有多个域,然后将该证书分配给您的ELB环境。

(您可以使用通配符,也许在提出问题时尚未提供通配符)

您不需要额外的负载均衡器。

答案 3 :(得分:0)

这对我有用,

首先,创建负载均衡器

aws elb create-load-balancer --load-balancer-name my-load-balancer --listeners "Protocol=HTTP,LoadBalancerPort=80,InstanceProtocol=HTTP,InstancePort=80" "Protocol=HTTPS,LoadBalancerPort=443,InstanceProtocol=HTTP,InstancePort=80,SSLCertificateId=arn-of-certificate" --subnets eb-subnet-of-primary-elb --security-groups sg-of-primary-elb

然后,将负载均衡器附加到EB env的主要自动缩放组

aws autoscaling attach-load-balancers --auto-scaling-group-name asg-name-of-primary-asg-in-eb --load-balancer-names my-load-balancer

答案 4 :(得分:0)

需要注意的另一件事是,EBS创建的实例需要允许您的自定义ELB与它们通信。

您需要在EBS自动创建的安全组(包含说明SecurityGroup for ElasticBeanstalk environment)中创建INBOUND规则,以允许TCP:80访问。我将自定义ELB放在不同的安全组中,因此我将sg - **** ID指定为源。