我正在开发部署在AWS Elastic Beanstalk Tomcat 7容器上的Lift应用程序。使用Elastic Load Balancer时,我的应用程序需要sticky sessions。
由于我的应用程序使用标准servlet内容,因此它向客户端提供JSESSIONID
cookie。我想将AWS配置为使用应用程序控制的会话粘性,在给定我的cookie名称的情况下,它将跟踪会话。但是,在Elastic Beanstalk Load Balancer配置中,我只看到配置AWS管理的cookie的能力。我想这会有效,但我宁愿只提供一个cookie,并且粘性与会话一致,与我们在应用程序中配置它们的方式一致。
虽然看起来我们可以在与我的EB实例关联的EC2设置中配置应用程序控制的会话粘性,但是只要我们在EB控制台中进行更改,我们应用的设置就会被破坏。这不是一个非常令人惊讶的行为,但我希望我们很快就会忘记这种行为并意外地消除我们的设置。
有谁知道是否有可能使粘性变粘? :)
答案 0 :(得分:2)
Elastic Load Balancer(ELB)支持应用程序控制的会话粘性(http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-sticky-sessions.html#enable-sticky-sessions-application)。如果要执行此操作,可以创建.ebextensions
脚本来修改Beanstalk ELB。您无法通过Beanstalk Web控制台执行此操作。
要通过.ebextensions
进行配置,只需在根Beanstalk应用程序中创建一个名为.ebextensions
的目录,并在00-load-balancer.config
目录中创建一个文件(例如:.ebextensions
)。 / p>
.ebextensions/00-load-balancer.config
文件可以是:
{
"Resources": {
"AWSEBLoadBalancer": {
"Type": "AWS::ElasticLoadBalancing::LoadBalancer",
"Properties": {
"AppCookieStickinessPolicy": [
{
"PolicyName": "HttpSessionStickinessPolicy",
"CookieName": "JSESSIONID"
}
],
"Listeners": [
{
"LoadBalancerPort": 80,
"Protocol": "HTTP",
"InstancePort": 80,
"InstanceProtocol": "HTTP",
"PolicyNames": [
"HttpSessionStickinessPolicy"
]
}
]
}
}
}
}
配置将修改ELB以侦听端口80并根据HttpSessionStickinessPolicy
策略将其转发到某个EC2实例端口80。 HttpSessionStickinessPolicy
将执行应用程序控制的会话粘性。
请参阅AWS Elastic Beanstalk(http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environment-resources.html)和AWS CloudFormation(http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-elb.html)文档以了解更多相关信息。