Elastic Load Balancing
Classic Load Balancers

Configurer des sessions permanentes pour votre Classic Load Balancer

Par défaut, un Equilibreur de charge classique achemine chaque demande de façon indépendante vers l'instance enregistrée ayant la plus petite charge. Cependant, vous pouvez utiliser la fonction de session permanente (aussi appelée affinité de session), qui permet à l'équilibreur de charge de lier la session d'un utilisateur à une instance spécifique. Il est ainsi possible de garantir que toutes les demandes de l'utilisateur pendant la session sont adressées à la même instance.

La clé de la gestion des sessions permanentes consiste à déterminer combien de temps votre équilibreur de charge doit acheminer systématiquement les demandes de l'utilisateur vers la même instance. Si votre application a son propre cookie de session, vous pouvez configurer Elastic Load Balancing pour que le cookie de session suive la durée spécifiée par le cookie de session de l'application. Si votre application n'a pas son propre cookie de session, vous pouvez configurer Elastic Load Balancing pour créer un cookie de session en spécifiant votre propre durée de permanence.

Elastic Load Balancing crée un cookie, nommé AWSELB, qui est utilisé pour mapper la session à l'instance.

Prérequis

  • Un équilibreur de charge HTTP/HTTPS

  • Au moins une instance saine dans chaque zone de disponibilité.

Compatibilité

  • Le RFC pour la propriété path d'un cookie autorise les traits de soulignement. Cependant, l'URI Elastic Load Balancing encode les traits de soulignement en %5F car certains navigateurs, comme Internet Explorer 7, s'attendent à ce que les traits de soulignement soient encodés par l'URI en %5F. En raison de l'impact potentiel sur les navigateurs qui fonctionnent actuellement, Elastic Load Balancing continue à encoder les traits de soulignement dans l'URI. Par exemple, si le cookie a la propriété path=/my_path, Elastic Load Balancing change cette propriété dans la demande transmise en path=/my%5Fpath.

  • Vous ne pouvez pas définir l'indicateur secure ou HttpOnly sur vos cookies de permanence de sessions basée sur la durée. Toutefois, ces cookies contiennent des données sensibles. Notez que si vous définissez l'indicateur secure ou HttpOnly sur un cookie de permanence de session contrôlée par application, celui-ci est également défini sur le cookie AWSELB.

  • Si le champ Set-Cookie d'un cookie d'application contient un point-virgule de fin, l'équilibreur de charge ignore le cookie.

Permanence de session basée sur la durée

L'équilibreur de charge utilise un cookie spécial afin de suivre l'instance pour chaque demande vers chaque écouteur. Lorsque l'équilibreur de charge reçoit une demande, il vérifie d'abord si ce cookie est présent dans la demande. Si tel est le cas, la demande est envoyée à l'instance spécifiée dans le cookie. S'il n'y a pas de cookie, l'équilibreur de charge choisit une instance à partir de l'algorithme d'équilibrage de charge existant. Un cookie est inséré dans la réponse pour lier les demandes suivantes provenant du même utilisateur à cette instance. La configuration de la stratégie de permanence de session définit l'expiration d'un cookie, ce qui établit la durée de validité de chaque cookie. L'équilibreur de charge n'actualise pas le délai d'expiration du cookie et ne vérifie pas si le cookie a expiré avant de l'utiliser. Après l'expiration d'un cookie, la session n'est plus permanente. Le client doit supprimer le cookie de son magasin de cookies lorsque celui-ci est expiré.

Si une instance est défaillante ou devient défectueuse, l'équilibreur de charge s'arrête d'acheminer les demandes vers cette celle-ci et choisit une nouvelle instance saine en fonction de l'algorithme d'équilibrage de charge existant. La demande est acheminée vers la nouvelle instance comme s'il n'existait pas de cookie et que la session n'était plus permanente.

Si un client bascule vers un écouteur avec un port backend différent, la permanence est perdue.

Pour activer des sessions permanentes basées sur la durée pour un équilibreur de charge à l'aide de la console

  1. Ouvrez la console Amazon EC2 à l'adresse https://console.aws.amazon.com/ec2/.

  2. Dans le volet de navigation, sous LOAD BALANCING, choisissez Load Balancers.

  3. Sélectionnez votre équilibreur de charge.

  4. Sous l'onglet Description, choisissez Edit stickiness.

  5. Sur la page Edit stickiness, sélectionnez Enable load balancer generated cookie stickiness.

  6. (Facultatif) Pour Expiration Period, saisissez la période d'expiration du cookie, en secondes. Si vous ne spécifiez pas de période d'expiration, la session permanente dure pendant la durée de la session de navigateur.

  7. Choisissez Save.

Pour activer des sessions permanentes basées sur la durée pour un équilibreur de charge à l'aide de l'interface AWS CLI

  1. Utilisez la commande create-lb-cookie-stickiness-policy suivante pour créer une stratégie de permanence pour le cookie généré par l'équilibreur de charge avec une période d'expiration du cookie de 60 secondes :

    aws elb create-lb-cookie-stickiness-policy --load-balancer-name my-loadbalancer --policy-name my-duration-cookie-policy --cookie-expiration-period 60
  2. Utilisez la commande set-load-balancer-policies-of-listener suivante afin d'activer la permanence des sessions pour l'équilibreur de charge spécifié :

    aws elb set-load-balancer-policies-of-listener --load-balancer-name my-loadbalancer --load-balancer-port 443 --policy-names my-duration-cookie-policy

    Note

    La commande set-load-balancer-policies-of-listener remplace l'ensemble actuel de stratégies associées au port de l'équilibreur de charge spécifié. Chaque fois que vous utilisez cette commande, spécifiez l'option --policy-names pour répertorier toutes les stratégies à activer.

  3. (Facultatif) Utilisez la commande describe-load-balancers suivante pour vérifier que la stratégie est activée :

    aws elb describe-load-balancers --load-balancer-name my-loadbalancer

    La réponse inclut les informations suivantes qui montrent que la stratégie est activée pour l'écouteur sur le port spécifié :

    { "LoadBalancerDescriptions": [ { ... "ListenerDescriptions": [ { "Listener": { "InstancePort": 443, "SSLCertificateId": "arn:aws:iam::123456789012:server-certificate/my-server-certificate", "LoadBalancerPort": 443, "Protocol": "HTTPS", "InstanceProtocol": "HTTPS" }, "PolicyNames": [ "my-duration-cookie-policy", "ELBSecurityPolicy-2016-08" ] }, ... ], ... "Policies": { "LBCookieStickinessPolicies": [ { "PolicyName": "my-duration-cookie-policy", "CookieExpirationPeriod": 60 } ], "AppCookieStickinessPolicies": [], "OtherPolicies": [ "ELBSecurityPolicy-2016-08" ] }, ... } ] }

Permanence des sessions contrôlées par application

L'équilibreur de charge utilise un cookie spécial pour associer la session à l'instance qui a traité la demande initiale, mais suit la durée de vie du cookie d'application spécifié dans la configuration de la stratégie. L'équilibreur de charge n'insère un nouveau cookie de permanence que si la réponse de l'application inclut un nouveau cookie d'application. Le cookie de permanence de l'équilibreur de charge n'est pas mis à jour à chaque demande. Si le cookie d'application est explicitement supprimé ou expire, la session cesse d'être permanente jusqu'à l'émission d'un nouveau cookie.

Si une instance est défaillante ou devient défectueuse, l'équilibreur de charge s'arrête d'acheminer les demandes vers cette celle-ci et choisit une nouvelle instance saine en fonction de l'algorithme d'équilibrage de charge existant. L'équilibreur de charge traite désormais la session comme étant liée à la nouvelle instance saine et continue d'acheminer les demandes vers cette instance, même si l'instance en échec est récupérée.

Pour activer la permanence de session contrôlée par application à l'aide de la console

  1. Ouvrez la console Amazon EC2 à l'adresse https://console.aws.amazon.com/ec2/.

  2. Dans le volet de navigation, sous LOAD BALANCING, choisissez Load Balancers.

  3. Sélectionnez votre équilibreur de charge.

  4. Sous l'onglet Description, choisissez Edit stickiness.

  5. Sur la page Edit stickiness, sélectionnez Enable application generated cookie stickiness.

  6. Pour Cookie Name, tapez le nom du cookie de votre application.

  7. Choisissez Save.

Pour activer la permanence de session contrôlée par application à l'aide de l'interface AWS CLI

  1. Utilisez la commande create-app-cookie-stickiness-policy suivante pour créer une stratégie de permanence pour le cookie généré par l'application :

    aws elb create-app-cookie-stickiness-policy --load-balancer-name my-loadbalancer --policy-name my-app-cookie-policy --cookie-name my-app-cookie
  2. Utilisez la commande set-load-balancer-policies-of-listener suivante afin d'activer la permanence des sessions pour un équilibreur de charge :

    aws elb set-load-balancer-policies-of-listener --load-balancer-name my-loadbalancer --load-balancer-port 443 --policy-names my-app-cookie-policy

    Note

    La commande set-load-balancer-policies-of-listener remplace l'ensemble actuel de stratégies associées au port de l'équilibreur de charge spécifié. Chaque fois que vous utilisez cette commande, spécifiez l'option --policy-names pour répertorier toutes les stratégies à activer.

  3. (Facultatif) Utilisez la commande describe-load-balancers suivante pour vérifier que la stratégie de permanence est activée :

    aws elb describe-load-balancers --load-balancer-name my-loadbalancer
  4. La réponse inclut les informations suivantes qui montrent que la stratégie est activée pour l'écouteur sur le port spécifié :

    { "LoadBalancerDescriptions": [ { ... "ListenerDescriptions": [ { "Listener": { "InstancePort": 443, "SSLCertificateId": "arn:aws:iam::123456789012:server-certificate/my-server-certificate", "LoadBalancerPort": 443, "Protocol": "HTTPS", "InstanceProtocol": "HTTPS" }, "PolicyNames": [ "my-app-cookie-policy", "ELBSecurityPolicy-2016-08" ] }, { "Listener": { "InstancePort": 80, "LoadBalancerPort": 80, "Protocol": "TCP", "InstanceProtocol": "TCP" }, "PolicyNames": [] } ], ... "Policies": { "LBCookieStickinessPolicies": [], "AppCookieStickinessPolicies": [ { "PolicyName": "my-app-cookie-policy", "CookieName": "my-app-cookie" } ], "OtherPolicies": [ "ELBSecurityPolicy-2016-08" ] }, ... } ] }