我可以在AWS Elastic Beanstalk中使用应用程序控制的会话粘性吗?

时间:2014-03-12 16:52:17

标签: session cookies amazon-web-services tomcat7 elastic-beanstalk

我正在开发部署在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控制台中进行更改,我们应用的设置就会被破坏。这不是一个非常令人惊讶的行为,但我希望我们很快就会忘记这种行为并意外地消除我们的设置。

有谁知道是否有可能使粘性变粘? :)

1 个答案:

答案 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)文档以了解更多相关信息。