

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Konfigurasikan sesi lengket untuk Classic Load Balancer
<a name="elb-sticky-sessions"></a>

Secara default, Classic Load Balancer merutekan setiap permintaan secara independen ke instance terdaftar dengan beban terkecil. Namun, Anda dapat menggunakan fitur *sesi lengket* (juga dikenal sebagai *afinitas sesi*), yang memungkinkan penyeimbang beban untuk mengikat sesi pengguna ke instance tertentu. Ini memastikan bahwa semua permintaan dari pengguna selama sesi dikirim ke instance yang sama.

Kunci untuk mengelola sesi lengket adalah menentukan berapa lama penyeimbang beban Anda harus secara konsisten merutekan permintaan pengguna ke instance yang sama. Jika aplikasi Anda memiliki cookie sesi sendiri, maka Anda dapat mengonfigurasi Elastic Load Balancing sehingga cookie sesi mengikuti durasi yang ditentukan oleh cookie sesi aplikasi. Jika aplikasi Anda tidak memiliki cookie sesi sendiri, maka Anda dapat mengonfigurasi Elastic Load Balancing untuk membuat cookie sesi dengan menentukan durasi lengket Anda sendiri.

Elastic Load Balancing membuat cookie, bernama AWSELB, yang digunakan untuk memetakan sesi ke instance.

**Persyaratan**
+ Penyeimbang HTTP/HTTPS beban.
+ Setidaknya satu contoh sehat di setiap Availability Zone.

**Kompatibilitas**
+ RFC untuk properti jalur cookie memungkinkan garis bawah. Namun, Elastic Load Balancing URI mengkodekan karakter garis bawah `%5F` karena beberapa browser, seperti Internet Explorer 7, mengharapkan garis bawah untuk dikodekan URI sebagai. `%5F` Karena potensi untuk memengaruhi browser yang saat ini berfungsi, Elastic Load Balancing terus menyandikan karakter garis bawah URI. Misalnya, jika cookie memiliki properti`path=/my_path`, Elastic Load Balancing mengubah properti ini dalam permintaan yang diteruskan ke. `path=/my%5Fpath`
+ Anda tidak dapat menyetel `secure` bendera atau `HttpOnly` bendera pada cookie lengket sesi berbasis durasi Anda. Namun, cookie ini tidak mengandung data sensitif. Perhatikan bahwa jika Anda menyetel `secure` bendera atau `HttpOnly` bendera pada cookie lengket sesi yang dikendalikan aplikasi, itu juga diatur pada cookie. AWSELB 
+ Jika Anda memiliki titik koma di `Set-Cookie` bidang cookie aplikasi, penyeimbang beban mengabaikan cookie.

**Topics**
+ [Kelengketan sesi berbasis durasi](#enable-sticky-sessions-duration)
+ [Kelengketan sesi yang dikontrol aplikasi](#enable-sticky-sessions-application)

## Kelengketan sesi berbasis durasi
<a name="enable-sticky-sessions-duration"></a>

Penyeimbang beban menggunakan cookie khusus, AWSELB, untuk melacak instance untuk setiap permintaan ke setiap pendengar. Ketika penyeimbang beban menerima permintaan, pertama-tama penyeimbang beban memeriksa apakah cookie ini ada di permintaan. Jika demikian, permintaan dikirim ke instance yang ditentukan dalam cookie. Jika tidak ada cookie, load balancer memilih instance berdasarkan algoritma load balancing yang ada. Cookie dimasukkan ke dalam respons untuk mengikat permintaan berikutnya dari pengguna yang sama ke instance itu. Konfigurasi kebijakan stickiness mendefinisikan kedaluwarsa cookie, yang menetapkan durasi validitas untuk setiap cookie. Penyeimbang beban tidak menyegarkan waktu kedaluwarsa cookie dan tidak memeriksa apakah cookie kedaluwarsa sebelum menggunakannya. Setelah cookie kedaluwarsa, sesi tidak lagi lengket. Klien harus menghapus cookie dari toko cookie setelah kedaluwarsa.

Dengan permintaan CORS (cross-origin resource sharing), beberapa peramban memerlukan `SameSite=None; Secure` untuk mengaktifkan kelekatan. Dalam hal ini, Elastic Load Balancing membuat cookie lengket kedua AWSELBCORS, yang mencakup informasi yang sama dengan cookie lengket asli ditambah atribut ini. `SameSite` Klien menerima kedua cookie.

Jika sebuah instance gagal atau menjadi tidak sehat, penyeimbang beban menghentikan permintaan routing ke instance itu, dan memilih instance sehat baru berdasarkan algoritma load balancing yang ada. Permintaan dialihkan ke instance baru seolah-olah tidak ada cookie dan sesi tidak lagi lengket.

Jika klien beralih ke pendengar dengan port backend yang berbeda, kekakuan akan hilang.

**Untuk mengaktifkan sesi lengket berbasis durasi untuk penyeimbang beban menggunakan konsol**

1. Buka konsol Amazon EC2 di. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)

1. Pada panel navigasi, di bawah **PENYEIMBANGAN BEBAN**, pilih **Penyeimbang beban**.

1. Pilih nama penyeimbang beban untuk membuka halaman detailnya.

1. Pada tab **Listeners**, pilih **Kelola** pendengar.

1. **Pada halaman **Kelola pendengar**, cari listener yang akan diperbarui dan pilih **Edit** di bawah Cookie stickiness.**

1. Pada pop-up **pengaturan lengket Edit cookie**, pilih **Dihasilkan oleh** penyeimbang beban.

1. (Opsional) Untuk periode **kedaluwarsa, ketikkan periode** kedaluwarsa cookie, dalam hitungan detik. Jika Anda tidak menentukan periode kedaluwarsa, sesi lengket berlangsung selama sesi browser.

1. Pilih **Simpan perubahan** untuk menutup jendela pop-up.

1. Pilih **Simpan perubahan** untuk kembali ke halaman detail penyeimbang beban.

**Untuk mengaktifkan sesi lengket berbasis durasi untuk penyeimbang beban menggunakan AWS CLI**

1. Gunakan perintah [create-lb-cookie-stickiness-policy](https://docs.aws.amazon.com/cli/latest/reference/elb/create-lb-cookie-stickiness-policy.html) berikut untuk membuat kebijakan lengket cookie yang dihasilkan load balancer dengan periode kedaluwarsa cookie 60 detik:

   ```
   aws elb create-lb-cookie-stickiness-policy --load-balancer-name my-loadbalancer --policy-name my-duration-cookie-policy --cookie-expiration-period 60
   ```

1. Gunakan perintah [set-load-balancer-policies-of-listener](https://docs.aws.amazon.com/cli/latest/reference/elb/set-load-balancer-policies-of-listener.html) berikut untuk mengaktifkan kekakuan sesi untuk penyeimbang beban yang ditentukan:

   ```
   aws elb set-load-balancer-policies-of-listener --load-balancer-name my-loadbalancer --load-balancer-port 443 --policy-names my-duration-cookie-policy
   ```
**catatan**  
`set-load-balancer-policies-of-listener`Perintah menggantikan kumpulan kebijakan saat ini yang terkait dengan port penyeimbang beban yang ditentukan. Setiap kali Anda menggunakan perintah ini, tentukan `--policy-names` opsi untuk mencantumkan semua kebijakan yang akan diaktifkan.

1. (Opsional) Gunakan [describe-load-balancers](https://docs.aws.amazon.com/cli/latest/reference/elb/describe-load-balancers.html)perintah berikut untuk memverifikasi bahwa kebijakan diaktifkan:

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

   Respons mencakup informasi berikut, yang menunjukkan bahwa kebijakan diaktifkan untuk listener pada port yang ditentukan:

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

## Kelengketan sesi yang dikontrol aplikasi
<a name="enable-sticky-sessions-application"></a>

Penyeimbang beban menggunakan cookie khusus untuk mengaitkan sesi dengan instance yang menangani permintaan awal, tetapi mengikuti masa pakai cookie aplikasi yang ditentukan dalam konfigurasi kebijakan. Load balancer hanya menyisipkan cookie lengket baru jika respons aplikasi menyertakan cookie aplikasi baru. Cookie lengket penyeimbang beban tidak diperbarui dengan setiap permintaan. Jika cookie aplikasi dihapus atau kedaluwarsa secara eksplisit, sesi berhenti menjadi lengket sampai cookie aplikasi baru dikeluarkan.

Atribut berikut yang ditetapkan oleh instance back-end dikirim ke klien dalam cookie:`path`,,,,,`port`,`domain`,`secure`,`httponly`,`discard`,,`max-age`, `expires` `version``comment`, `commenturl` dan. `samesite`

Jika sebuah instance gagal atau menjadi tidak sehat, penyeimbang beban menghentikan permintaan routing ke instance itu, dan memilih instance sehat baru berdasarkan algoritma load balancing yang ada. Penyeimbang beban memperlakukan sesi sebagai sekarang “macet” ke instance sehat baru, dan melanjutkan permintaan perutean ke instance itu bahkan jika instance yang gagal kembali.

**Untuk mengaktifkan kelengketan sesi yang dikontrol aplikasi menggunakan konsol**

1. Buka konsol Amazon EC2 di. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)

1. Pada panel navigasi, di bawah **PENYEIMBANGAN BEBAN**, pilih **Penyeimbang beban**.

1. Pilih nama penyeimbang beban untuk membuka halaman detailnya.

1. Pada tab **Listeners**, pilih **Kelola** pendengar.

1. **Pada halaman **Kelola pendengar**, cari listener yang akan diperbarui dan pilih **Edit** di bawah Cookie stickiness.**

1. Pilih **Dihasilkan oleh aplikasi**.

1. Untuk **Nama Cookie**, ketikkan nama cookie aplikasi Anda.

1. Pilih **Simpan perubahan**.

**Untuk mengaktifkan kelengketan sesi yang dikontrol aplikasi menggunakan AWS CLI**

1. Gunakan perintah [create-app-cookie-stickiness-policy](https://docs.aws.amazon.com/cli/latest/reference/elb/create-app-cookie-stickiness-policy.html) berikut untuk membuat kebijakan lengket cookie yang dihasilkan aplikasi:

   ```
   aws elb create-app-cookie-stickiness-policy --load-balancer-name my-loadbalancer --policy-name my-app-cookie-policy --cookie-name my-app-cookie
   ```

1. Gunakan perintah [set-load-balancer-policies-of-listener](https://docs.aws.amazon.com/cli/latest/reference/elb/set-load-balancer-policies-of-listener.html) berikut untuk mengaktifkan kekakuan sesi untuk penyeimbang beban:

   ```
   aws elb set-load-balancer-policies-of-listener --load-balancer-name my-loadbalancer --load-balancer-port 443 --policy-names my-app-cookie-policy
   ```
**catatan**  
`set-load-balancer-policies-of-listener`Perintah menggantikan kumpulan kebijakan saat ini yang terkait dengan port penyeimbang beban yang ditentukan. Setiap kali Anda menggunakan perintah ini, tentukan `--policy-names` opsi untuk mencantumkan semua kebijakan yang akan diaktifkan.

1. (Opsional) Gunakan [describe-load-balancers](https://docs.aws.amazon.com/cli/latest/reference/elb/describe-load-balancers.html)perintah berikut untuk memverifikasi bahwa kebijakan lengket diaktifkan:

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

1. Respons mencakup informasi berikut, yang menunjukkan bahwa kebijakan diaktifkan untuk listener pada port yang ditentukan:

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