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

Posted

技术标签:

【中文标题】我可以在 AWS Elastic Beanstalk 中使用应用程序控制的会话粘性吗?【英文标题】:Can I use application-controlled session stickiness in AWS Elastic Beanstalk? 【发布时间】:2014-04-16 23:57:10 【问题描述】:

我正在开发一个部署在 AWS Elastic Beanstalk Tomcat 7 容器上的 Lift 应用程序。在使用 Elastic Load Balancer 时,我的应用程序需要 sticky sessions。

由于我的应用程序使用标准的 servlet 东西,它为客户端提供了一个 JSESSIONID cookie。我想将 AWS 配置为使用应用程序控制的会话粘性,在给定我的 cookie 名称的情况下,它将跟踪会话。但是,在 Elastic Beanstalk 负载均衡器配置中,我只看到了配置 AWS 管理的 cookie 的能力。我想这会起作用,但我宁愿只提供一个 cookie,并让粘性与会话一致,与我们在应用程序中配置它们的方式一致。

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

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

【问题讨论】:

【参考方案1】:

弹性负载均衡器 (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 的目录,然后在.ebextensions 目录中创建一个文件(例如:00-load-balancer.config)。

.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) 文档以了解更多信息。

【讨论】:

这对我有用,应该被接受为正确答案。

以上是关于我可以在 AWS Elastic Beanstalk 中使用应用程序控制的会话粘性吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在一个 AWS Elastic Beanstalk 应用程序中拥有多个网站吗?

AWS Lambda 与 Elastic Beanstalk

AWS Elastic Beanstalk 容器命令失败

使用 AWS Elastic Beanstalk 的 Laravel 队列

AWS Elastic Beanstalk HTTPS

部署到 AWS Elastic Beanstalk 时的 ConnectionString 转换