

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
<a name="elb-sticky-sessions"></a>

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 HTTP/HTTPS balanceador de carga.
+ 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 `secure` sinalizador ou `HttpOnly` sinalizador em um cookie de aderência de sessão controlado pelo aplicativo, ele também será definido 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.

**Topics**
+ [Persistência da sessão com base na duração](#enable-sticky-sessions-duration)
+ [Persistência da sessão controlada pela aplicação](#enable-sticky-sessions-application)

## Persistência da sessão com base na duração
<a name="enable-sticky-sessions-duration"></a>

O balanceador de carga usa um cookie especial, AWSELB, para rastrear a instância de cada solicitação para cada ouvinte. 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 aderência AWSELBCORS, que inclui as mesmas informações do cookie de aderência original mais esse 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.

**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/](https://console.aws.amazon.com/ec2/).

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

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

1. Na guia **Receptores**, escolha **Gerenciar receptores**.

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

1. No pop-up **Editar configuração de perdurabilidade de cookies**, selecione **Gerado pelo balanceador de carga**.

1. (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.

1. Escolha **Salvar alterações** para fechar a janela pop-up.

1. Escolha **Salvar alterações** para retornar à página de detalhes do balanceador de carga.

**Para habilitar sessões fixas com base na duração para um balanceador de carga usando o AWS CLI**

1. Use o comando [create-lb-cookie-stickiness-policy](https://docs.aws.amazon.com/cli/latest/reference/elb/create-lb-cookie-stickiness-policy.html) a seguir para criar uma política de aderência de cookies gerada pelo balanceador de carga com um período de expiração de cookies 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
   ```

1. Use o seguinte comando [set-load-balancer-policies-of-listener](https://docs.aws.amazon.com/cli/latest/reference/elb/set-load-balancer-policies-of-listener.html) para ativar a aderência da sessão para o balanceador de carga 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.

1. (Opcional) Use o [describe-load-balancers](https://docs.aws.amazon.com/cli/latest/reference/elb/describe-load-balancers.html)comando a seguir para verificar se a política está 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-TLS-1-2-2017-01"
                       ]
                   },
                   ...
               ],            
               ...
               "Policies": {
                   "LBCookieStickinessPolicies": [
                    {
                           "PolicyName": "my-duration-cookie-policy", 
                           "CookieExpirationPeriod": 60
                       }
   
                   ], 
                   "AppCookieStickinessPolicies": [], 
                   "OtherPolicies": [
                       "ELBSecurityPolicy-TLS-1-2-2017-01"
                   ]
               },
               ...
           }
       ]
   }
   ```

## Persistência da sessão controlada pela aplicação
<a name="enable-sticky-sessions-application"></a>

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.

**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/](https://console.aws.amazon.com/ec2/).

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

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

1. Na guia **Receptores**, escolha **Gerenciar receptores**.

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

1. Selecione **Gerado pela aplicação**.

1. Em **Nome de cookie**, digite o nome do cookie do aplicativo.

1. Escolha **Salvar alterações**.

**Para ativar a aderência da sessão controlada pelo aplicativo usando o AWS CLI**

1. Use o seguinte comando [create-app-cookie-stickiness-policy](https://docs.aws.amazon.com/cli/latest/reference/elb/create-app-cookie-stickiness-policy.html) para criar uma política de aderência de cookies 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
   ```

1. Use o seguinte comando [set-load-balancer-policies-of-listener](https://docs.aws.amazon.com/cli/latest/reference/elb/set-load-balancer-policies-of-listener.html) para ativar a aderência da sessão para um balanceador de carga:

   ```
   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.

1. (Opcional) Use o [describe-load-balancers](https://docs.aws.amazon.com/cli/latest/reference/elb/describe-load-balancers.html)comando a seguir para verificar se a política fixa está habilitada:

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

1. 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-TLS-1-2-2017-01"
                       ]
                   }, 
                   {
                       "Listener": {
                           "InstancePort": 80, 
                           "LoadBalancerPort": 80, 
                           "Protocol": "TCP", 
                           "InstanceProtocol": "TCP"
                       }, 
                       "PolicyNames": []
                   }
               ],
               ...
               "Policies": {
                   "LBCookieStickinessPolicies": [], 
                   "AppCookieStickinessPolicies": [
                   {
                           "PolicyName": "my-app-cookie-policy", 
                           "CookieName": "my-app-cookie"
                       }
   
                   ], 
                   "OtherPolicies": [
                       "ELBSecurityPolicy-TLS-1-2-2017-01" 
                   ]
               }, 
               ...
           }
       ]
   }
   ```