AWSのSticky Sessionを作成（スティッキーセッション）

このチュートリアルでは、一歩一歩、AWSで**Sticky Session**を作成する方法を説明します。

:::note warn
このチュートリアルを進めるには、AWSの**Elastic Load Balancer**のコンセプトに慣れている必要があります。
:::

## なぜSticky Sessionを使用し、それは何のためですか？

次の設定を使用するPHPアプリケーションがあるとします：

- アプリケーションロードバランサー
- 2つのEC2インスタンス

![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/57de4253-52f0-f6a3-fe9b-33014e630b5d.png)

ユーザーがログインすると、弊社の**Elastic Load Balancer**が2つのインスタンス間で負荷を分散します。

ユーザーは最初のインスタンスにアクセスします：

![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/1eb22fb6-4ab2-516c-e4f0-53b148e2ce92.png)

次に、2番目のインスタンスにアクセスします：

![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/b11ee21d-74a0-425e-bdd6-899a1b0c0246.png)

そして次々と続きます。

これはステートレスアプリケーションの場合には問題ありません。

**Stateless Application**とは、データやアプリケーションの状態をクラスタや永続ストレージに保存しないアプリケーションです。

ただし、アプリケーションがユーザーセッションを必要とする場合、問題が発生する可能性があります。実際に、商品をカートに追加してからリンクをクリックした後、カートが空になっていることに気付いたり、商品をカートから削除してからリンクをクリックした後に商品が削除されていないことに気付いたりするかもしれません。

この問題を解決するために、Sticky Sessionを使用できます。

:::note warn
Sticky Session以外にも、別の方法が存在することを知っておいてください。それについては別の日に説明します。
:::

## スティッキーセッションはどのように機能しますか？

これは非常に簡単に理解できます。ユーザーを1つのインスタンスにバインドするだけです。ユーザーがリクエストを行うと、ランダムに1つのインスタンスを使用します。例えば、2番目のインスタンス：

![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/b11ee21d-74a0-425e-bdd6-899a1b0c0246.png)

ユーザーが新しいリクエストを行う場合、引き続き2番目のインスタンスを使用します。

![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/b11ee21d-74a0-425e-bdd6-899a1b0c0246.png)

## 練習しよう！

2つのEC2インスタンスを起動してください。

アプリケーションロードバランサーをセットアップしてください。

分からない場合は、私のチュートリアル[AWSでApplication Load Balancerの作成](https://qiita.com/seikida/items/b1620057302185e50926)でこれらすべての手順を説明しています。

以下のコマンドを入力してください：

```php
yum install -y php
systemctl stop httpd
systemctl start httpd
cd /var/www/html/
rm -f index.html
curl https://gist.githubusercontent.com/seikida/b7398ff4300ee88752ce7d8fa2874c77/raw/index.php -o index.php
```

ウェブサイトにアクセスすると、このページがあるはずだ：

![Screenshot 2023-12-29 at 1.52.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/788ebaa0-c214-8840-e753-c4eb95a4a989.png)

ログインするには、「**totoro**」と入力し、「**Submit**」ボタンをクリックしてください。

プロフィールページが表示されます：

![Screenshot 2023-12-29 at 1.57.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/ca10ce73-0544-4a6e-a9ee-34fb01ef5d98.png)

以下に2つの問題が発生する可能性があります：

- ページを更新すると、ログインフォームに戻されます。そして再度ページを更新すると、プロフィールページに戻ります。
- 「Logout」というリンクをクリックしても機能しません。
この問題の原因は非常に単純です。Elastic Load Balancerが存在するため、2つのインスタンス間を切り替えています。1つはログインしている場合、もう1つはログインしていない場合です。

この問題を解決するためには、Sticky Sessionを作成すれば十分です。

「**ターゲットグループ**」をクリックしてください。

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333632303136312f64633832386536642d373535622d396139362d346638322d3231323637333330366136382e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/646b454b-f503-1a36-d803-2a77d5d88b52.png)

ターゲットグループを選択してください：

![Screenshot 2023-12-29 at 2.08.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/90363456-3cf1-ff5d-cb00-2bbd74441501.png)

「**アクション**」をクリックしてください。

![Screenshot 2023-12-29 at 2.14.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/2efc137b-bb64-5339-efcb-55d9c8789056.png)

「**ターゲットグループ属性を編集**」を選択してください。

![Screenshot 2023-12-29 at 2.17.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/4c5c05be-9b61-37f0-4927-086c81d798fd.png)

ターゲットグループ属性を編集画面に**ターゲット選択設定**のブロックを探してください。

![Screenshot 2023-12-29 at 2.22.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/12b29244-069d-2357-2483-25eff9c3824b.png)

「**維持設定をオンにする**」を選択してください。

![Screenshot 2023-12-29 at 2.25.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/86d98deb-7f37-67be-7d03-609f6d02ce1f.png)

クッキーの保存期間を設定できます。

![Screenshot 2023-12-29 at 2.30.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/04c8c10f-840f-2cae-dd1e-3002a25e7919.png)

「**変更内容の保存**」をクリックしてください。

![Screenshot 2023-12-29 at 2.31.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620161/af1be102-c8d3-e999-7da7-6a09ecb9d4cc.png)

ウェブページに戻ってください。
問題がありません。

# 動画

必要なら、Youtubeで動画を作成しました。

<iframe width="1062" height="606" src="https://www.youtube.com/embed/QDIxK-8iSa8" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>