Configurar sessões persistentes para seu Classic Load Balancer - Elastic Load Balancing

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configurar sessões persistentes para seu Classic Load Balancer

Por padrão, um Classic Load Balancer roteia cada solicitação de forma independente para a instância registrada com a menor carga. No entanto, você pode usar o recurso sticky session (também conhecida como afinidade de sessão), que permite que o load balancer vincule a sessão de um usuário a uma instância específica. Isso garante que todas as solicitações do usuário durante a sessão sejam enviadas para a mesma instância.

O segredo para o gerenciamento de sticky sessions é determinar por quanto tempo o load balancer deve rotear consistentemente a solicitação do usuário para a mesma instância. Se sua aplicação tiver seu próprio cookie de sessão, você pode configurar o Elastic Load Balancing de forma que o cookie da sessão acompanhe a duração especificada pelo cookie de sessão da aplicação. Se sua aplicação não tiver seu próprio cookie de sessão, você pode configurar o Elastic Load Balancing para criar um cookie de sessão ao especificar sua própria duração de persistência.

O Elastic Load Balancing cria um cookie, chamado AWSELB, que é usado para mapear a sessão para a instância.

Requisitos
  • Um load balancer HTTP/HTTPS.

  • Pelo menos uma instância íntegra em cada Zona de disponibilidade.

Compatibilidade
  • A RFC para a propriedade do caminho de um cookie permite sublinhados. No entanto, o URI do Elastic Load Balancing codifica caracteres sublinhados como %5F, pois alguns navegadores, como o Internet Explorer 7, esperam que os sublinhados sejam codificados no URI como %5F. Por causa do possível impacto a navegadores que estejam funcionando no momento, o Elastic Load Balancing continuará a codificar em URI os caracteres sublinhados. Por exemplo, se o cookie tiver a propriedade path=/my_path, o Elastic Load Balancing mudará essa propriedade na solicitação encaminhada para path=/my%5Fpath.

  • Você não pode definir o sinalizador secure ou o sinalizador HttpOnly nos cookies de perdurabilidade da sessão baseado na duração. No entanto, esses cookies não contêm dados confidenciais. Observe que, se você definir o sinalizador secure ou o sinalizador HttpOnly em um cookie de perdurabilidade da sessão controlada pelo aplicativo, ele também será configurado no cookie AWSELB.

  • Se você tiver um ponto-e-vírgula no final no campo Set-Cookie de um cookie do aplicativo, o load balancer ignorará o cookie.

Persistência da sessão com base na duração

O load balancer usa um cookie especial, AWSELB, para rastrear a instância para cada solicitação a cada listener. Quando o load balancer receber uma solicitação, ele primeiro verificará se esse cookie está presente na solicitação. Se estiver, a solicitação será enviada para a instância especificada no cookie. Se não houver um cookie, o load balancer selecionará uma instância com base no algoritmo de balanceamento de carga existente. Um cookie é inserido na resposta para vincular solicitações subsequentes do mesmo usuário para essa instância. A configuração da política de perdurabilidade define a expiração de um cookie, que estabelece a validade de cada cookie. O load balancer não atualiza o tempo de expiração do cookie e não verifica se o cookie expirou antes de usá-lo. Após um cookie expirar, a sessão não será mais sticky. O cliente deve remover o cookie do armazenamento de cookies após a expiração.

Com solicitações de CORS (cross-origin resource sharing, compartilhamento de recursos de origem cruzada), alguns navegadores exigem SameSite=None; Secure para habilitar a perdurabilidade. Nesse caso, o Elastic Load Balancing cria um segundo cookie de persistência, o AWSELBCORS, que inclui as mesmas informações que o cookie de persistência original, além deste atributo SameSite. Os clientes recebem ambos os cookies.

Se uma instância falhar ou ficar não deixar de ser íntegra, o load balancer interromperá as solicitações de roteamento para essa instância e escolherá uma nova instância íntegra com base no algoritmo de balanceamento de carga existente. A solicitação é roteada para a nova instância como se não houvesse cookie e a sessão não for mais perdurável.

Se um cliente mudar para um listener com uma porta de back-end diferente, a perdurabilidade será perdida.

New EC2 experience
Para habilitar sticky sessions com base na duração para um load balancer usando o console
  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, em Load Balancing (Balanceamento de carga), escolha Load balancers (Balanceadores de carga).

  3. Escolha o nome do balanceador de carga para abrir sua página de detalhes.

  4. Na guia Receptores, escolha Gerenciar receptores.

  5. Na página Gerenciar receptores, localize o receptor a ser atualizado e escolha Editar em Durabilidade do cookie.

  6. Selecione Gerado pelo balanceador de carga.

  7. (Opcional) Em Período de expiração, digite o período de expiração do cookie, em segundos. Se você não especificar um período de expiração, a sticky session durará por toda a sessão do navegador.

  8. Escolha Save changes (Salvar alterações).

Old EC2 experience
Para habilitar sticky sessions com base na duração para um load balancer usando o console
  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, em Load Balancing (Balanceamento de carga), escolha Load balancers (Balanceadores de carga).

  3. Selecione seu load balancer.

  4. Na guia Descrição, selecione Editar perdurabilidade.

  5. Na página Editar perdurabilidade, selecione Habilitar perdurabilidade de cookies gerada pelo load balancer.

  6. (Opcional) Em Período de expiração, digite o período de expiração do cookie, em segundos. Se você não especificar um período de expiração, a sticky session durará por toda a sessão do navegador.

  7. Escolha Save (Salvar).

Para habilitar sticky sessions com base na duração para um load balancer usando a AWS CLI
  1. Use o comando create-lb-cookie-perdurabilidade-policy para criar uma política de perdurabilidade de cookies gerada pelo load balancer com um período de expiração do cookie de 60 segundos:

    aws elb create-lb-cookie-stickiness-policy --load-balancer-name my-loadbalancer --policy-name my-duration-cookie-policy --cookie-expiration-period 60
  2. Use o comando set-load-balancer-policies-of-listener para habilitar a perdurabilidade da sessão para o load balancer especificado:

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

    O comando set-load-balancer-policies-of-listener substitui o conjunto atual de políticas associado à porta especificada do load balancer. Sempre que você usar esse comando, especifique a opção --policy-names para listar todas as políticas a serem habilitadas.

  3. (Opcional) Use o comando describe-load-balancers para verificar se a política foi habilitada:

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

    A resposta inclui as informações a seguir, que mostram que a política está ativada para o listener na porta especificada:

    { "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" ] }, ... } ] }

Persistência da sessão controlada pela aplicação

O load balancer usa um cookie especial para associar a sessão com a instância que lidou com a solicitação inicial, mas segue a vida do cookie do aplicativo especificado na configuração da política. O load balancer só inserirá um novo cookie de perdurabilidade se a resposta do aplicativo incluir um novo cookie do aplicativo. O cookie de perdurabilidade do load balancer não será atualizado com cada solicitação. Se o cookie for explicitamente removido ou expirar, a sessão deixará de ser perdurável até ser emitido um novo cookie do aplicativo.

Os seguintes atributos definidos por instâncias back-end são enviados para clientes no cookie: path, port, domain, secure, httponly, discard, max-age, expires, version, comment, commenturl e samesite.

Se uma instância falhar ou ficar não deixar de ser íntegra, o load balancer interromperá as solicitações de roteamento para essa instância e escolherá uma nova instância íntegra com base no algoritmo de balanceamento de carga existente. O load balancer trata a sessão agora como "grudada" à nova instância íntegra e continua a rotear solicitações para essa instância, mesmo se a instância falha retornar.

New EC2 experience
Para habilitar a perdurabilidade da sessão controlada por aplicativo usando o console
  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, em Load Balancing (Balanceamento de carga), escolha Load balancers (Balanceadores de carga).

  3. Escolha o nome do balanceador de carga para abrir sua página de detalhes.

  4. Na guia Receptores, escolha Gerenciar receptores.

  5. Na página Gerenciar receptores, localize o receptor a ser atualizado e escolha Editar em Durabilidade do cookie.

  6. Selecione Gerado pela aplicação.

  7. Em Nome de cookie, digite o nome do cookie do aplicativo.

  8. Escolha Save changes (Salvar alterações).

Old EC2 experience
Para habilitar a perdurabilidade da sessão controlada por aplicativo usando o console
  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, em Load Balancing (Balanceamento de carga), escolha Load balancers (Balanceadores de carga).

  3. Selecione seu load balancer.

  4. Na guia Descrição, selecione Editar perdurabilidade.

  5. Na página Editar perdurabilidade, selecione Habilitar perdurabilidade de cookies gerada pelo aplicativo.

  6. Em Nome de cookie, digite o nome do cookie do aplicativo.

  7. Escolha Save (Salvar).

Para habilitar a perdurabilidade da sessão controlada por aplicativo usando a AWS CLI
  1. Use o comando create-app-cookie-stickiness-policy para criar uma política de perdurabilidade de cookie gerada pelo aplicativo:

    aws elb create-app-cookie-stickiness-policy --load-balancer-name my-loadbalancer --policy-name my-app-cookie-policy --cookie-name my-app-cookie
  2. Use o comando set-load-balancer-policies-of-listener para habilitar a perdurabilidade da sessão para um load balancer:

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

    O comando set-load-balancer-policies-of-listener substitui o conjunto atual de políticas associado à porta especificada do load balancer. Sempre que você usar esse comando, especifique a opção --policy-names para listar todas as políticas a serem habilitadas.

  3. (Opcional) Use o comando describe-load-balancers para verificar se a política de perdurabilidade está habilitada:

    aws elb describe-load-balancers --load-balancer-name my-loadbalancer
  4. A resposta inclui as informações a seguir, que mostram que a política está ativada para o listener na porta especificada:

    { "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" ] }, ... } ] }