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

joe*_*cii 7 cookies session amazon-web-services tomcat7 amazon-elastic-beanstalk

我正在开发部署在AWS Elastic Beanstalk Tomcat 7容器上的Lift应用程序.使用Elastic Load Balancer时,我的应用程序需要粘性会话.

由于我的应用程序使用标准的servlet内容,因此它为JSESSIONID客户端提供cookie.我想将AWS配置为使用应用程序控制的会话粘性,在给定我的cookie名称的情况下,它将跟踪会话.但是,在Elastic Beanstalk Load Balancer配置中,我只看到配置AWS管理的cookie的能力.我想这会起作用,但我宁愿只提供一个cookie,并且粘性与会话一致,与我们在应用程序中配置它们的方式一致.

虽然看起来我们可以在与我的EB实例相关联的EC2设置中配置应用程序控制的会话粘性,但是只要我们在EB控制台中进行更改,我们应用的设置就会被破坏.这不是非常令人惊讶的行为,但我希望我们很快就会忘记这种行为并意外地消除我们的设置.

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

Edw*_*uel 5

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 控制台执行此操作。

要配置 via .ebextensions,只需.ebextensions在根 Beanstalk 应用程序中创建一个名为的目录,并00-load-balancer.config在该.ebextensions目录中创建一个文件(例如:)。

.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"
            ]
          }
        ]
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

该配置将修改 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 ) 文档以了解更多相关信息。